Что быстрее: автоматическое отображение, Valuinjector или ручное отображение? В какой степени каждый из них быстрее? [закрытый]
Предположим, что у меня есть этот объект в моем DAL (ORM etc)
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;}
}
И у меня есть модель вида, которая выглядит так
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 может принять до .5 мс для отображения большого класса. (необходима ссылка)
Я также помню, что видел статью, в которой описывается, как пользователи имеют более высокие шансы остаться на вашем сайте, если он загружается в течение 70 мс, а не 90 мс или более. (Я тоже ищу эту ссылку). Если automapper занимает большую часть времени загрузки моей страницы в сочетании с задержкой в сети, то я вижу потенциал не использовать automapper и создавать ручные классы для моего высокого уровня объемные страницы и придерживаться гибридного подхода.Итог: я бы сам провел тесты, но я недостаточно знаю о .NET internals, чтобы создать точные результаты, которые можно использовать в качестве многоразового руководства.
1 ответ:
Итог: Я бы сам провел тесты, но я недостаточно знаю о .NET internals, чтобы создать точные результаты, которые можно использовать в качестве многоразового руководства.
Вам не нужно знать внутренние компоненты .NET. Вам просто нужно знать, каковы ваши требования к производительности и как будет выглядеть типичное использование. Профилируйте код в соответствии с типичным сценарием использования во всем многообразии способов и выберите тот, который соответствует вашим требованиям к производительности и легче всего поддается обработке. поддерживайте (то есть не обязательно выбирайте наиболее эффективный; есть и другие критерии).