Что быстрее: автоматическое отображение, 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 против ручного сопоставления. Я уверен, что ручное картографирование-самое быстрое, но на сколько?

  1. Являются ли некоторые сценарии намного медленнее/быстрее, чем другие (например, выравнивание и т. д.)?

  2. Имеет ли смысл применять гибридный подход к отображению объектов между слоями?

Причина, по которой я спрашиваю, заключается в том, что проект Codeplex под названием emitmapper был создан для решения проблем производительности в automapper, и я помню, что видел комментарий, который сказал, что automapper может принять до .5 мс для отображения большого класса. (необходима ссылка)

Я также помню, что видел статью, в которой описывается, как пользователи имеют более высокие шансы остаться на вашем сайте, если он загружается в течение 70 мс, а не 90 мс или более. (Я тоже ищу эту ссылку). Если automapper занимает большую часть времени загрузки моей страницы в сочетании с задержкой в сети, то я вижу потенциал не использовать automapper и создавать ручные классы для моего высокого уровня объемные страницы и придерживаться гибридного подхода.

Итог: я бы сам провел тесты, но я недостаточно знаю о .NET internals, чтобы создать точные результаты, которые можно использовать в качестве многоразового руководства.

1 15

1 ответ:

Итог: Я бы сам провел тесты, но я недостаточно знаю о .NET internals, чтобы создать точные результаты, которые можно использовать в качестве многоразового руководства.

Вам не нужно знать внутренние компоненты .NET. Вам просто нужно знать, каковы ваши требования к производительности и как будет выглядеть типичное использование. Профилируйте код в соответствии с типичным сценарием использования во всем многообразии способов и выберите тот, который соответствует вашим требованиям к производительности и легче всего поддается обработке. поддерживайте (то есть не обязательно выбирайте наиболее эффективный; есть и другие критерии).