Что быстрее: Automapper, Valuinjector или ручное отображение? В какой степени каждый из них быстрее?
Предположим, у меня есть этот объект в моем DAL (ORM и т. Д.)
public class Student
{
public string Name {get;set;}
public string Address {get;set;}
public string Phone {get;set;}
public Parent Parent {get;set;}
}
public class Parent
{
public string Name {get;set;}
public string Address {get;set;}
public string Phone {get;set;}
}
И у меня есть ViewModel, которая выглядит так
public class StudentDetailVM
{
public string Name {get;set;}
public string Address {get;set;}
public string Phone {get;set;}
public string ParentName {get;set;}
public string ParentPhone {get;set;}
}
В этом случае мне нужно сплющить объекты. Я могу сделать это с помощью таких инструментов, как Automapper, ValueInjector, или я мог бы сделать это вручную. Это трудоемкая работа, если существует много таких классов, но, похоже, между всеми тремя подходами существует компромисс между производительностью и эффективностью разработчика.
Я ищу руководство о том, когда использовать Automapper против Valueinjector против ручного отображения. Я уверен, что ручное отображение является самым быстрым, но насколько?
Являются ли некоторые сценарии намного медленнее / быстрее, чем другие (например, выравнивание и т. Д.)?
Имеет ли смысл использовать гибридный подход к отображению объектов между слоями?
Причина, по которой я спрашиваю, состоит в том, что проект Codeplex под названием emitmapper был создан для решения проблем с производительностью в automapper, и я помню, что видел комментарий, в котором говорится, что automapper может потребоваться до 0,5 мс для отображения большого класса. (ссылка необходима)
Я также помню статью, в которой описывается, как пользователи имеют больше шансов остаться на вашем сайте, если он загружается в течение 70 мс, а не 90 мс и более. (Я тоже ищу эту ссылку). Если automapper потребляет большую часть моего времени загрузки страницы в сочетании с задержкой в сети, то я вижу потенциал не использовать automapper и создавать ручные классы для моих страниц большого объема и придерживаться гибридного подхода.
Итог: я бы сам запустил тесты, но я не знаю достаточно о внутренностях.NET, чтобы получить точные результаты, которые можно использовать в качестве ориентира для повторного использования.
1 ответ
Итог: я бы сам запустил тесты, но я не знаю достаточно о внутренностях.NET, чтобы получить точные результаты, которые можно использовать в качестве ориентира для повторного использования.
Вам не нужно знать внутренности.NET. Вам просто нужно знать, каковы ваши требования к производительности и как будет выглядеть ваше обычное использование. Профилируйте код в соответствии с типичным сценарием использования всеми возможными способами и выберите тот, который соответствует вашим требованиям к производительности и проще всего поддерживать (т. Е. Не обязательно выбирать наиболее производительный; есть другие критерии).