Что быстрее: 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. Вам просто нужно знать, каковы ваши требования к производительности и каково будет ваше типичное использование. Профилируйте код в соответствии с типичным сценарием использования во всем разнообразии способов и выберите то, что соответствует вашим требованиям к производительности, и проще всего поддерживать (т.е. Не обязательно выбирать наиболее эффективные, есть другие критерии).