Что быстрее: 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 vs Valueinjector против ручного сопоставления, Я уверен, что сопоставление вручную является самым быстрым, но насколько?
-
Являются ли некоторые сценарии намного медленнее/быстрее других (например, сглаживание и т.д.)?
-
Имеет ли смысл делать гибридный подход к отображению объектов между слоями?
Причина, по которой я спрашиваю, заключается в том, что проект Codeplex, называемый emitmapper, был создан для решения проблем производительности в automapper, и я помню, что видел комментарий, который сказал, что automapper может занимать до .5ms для отображения большого класса. (требуется ссылка)
Я также помню, как я видел статью, в которой описывается, как пользователи имеют более высокий шанс остаться на вашем сайте, если он загружается в пределах 70 мс, в отличие от 90 мс или более. (Я тоже ищу эту ссылку). Если automapper потребляет большую часть моего времени загрузки страницы, в сочетании с латентностью сети, то я вижу потенциальную возможность не использовать automapper и создавать ручные классы для моих страниц с большим объемом и придерживаться гибридного подхода.
В нижней строке: я бы сам запускал тесты, но я не знаю достаточно о внутренних компонентах .NET, чтобы создавать точные результаты, которые можно использовать в качестве рекомендаций для повторного использования.
Ответы
Ответ 1
В нижней строке: я бы сам запускал тесты, но я не знаю достаточно о внутренних компонентах .NET, чтобы создавать точные результаты, которые можно использовать в качестве рекомендаций для повторного использования.
Вам не нужно знать внутренние компоненты .NET. Вам просто нужно знать, каковы ваши требования к производительности и каково будет ваше типичное использование. Профилируйте код в соответствии с типичным сценарием использования во всем разнообразии способов и выберите то, что соответствует вашим требованиям к производительности, и проще всего поддерживать (т.е. Не обязательно выбирать наиболее эффективные, есть другие критерии).