2016-05-23 2 views
1

Мы используем AutoMapper 3.1.1.0 в нашем приложении Dot net. У нас есть много классов, которые можно отобразить. Время, необходимое для инициализации отображения, составляет почти 22 секунды. У нас почти 1327 DTO, которые необходимо сопоставить.AutoMapper ухудшает производительность в приложении .net, имеющем более 1327 DTO при сопоставлении

И мы можем сказать, что каждый DTO имеет в среднем 8 свойств.

Моя забота для каждого сообщения, мы проверяем в списке из 1327 сопоставляются DTO,
, а затем использовать

if (MappingManager.MessageMappings.ContainsKey(message.GetType())) 
      { 
       var myMessage = Mapper.Map(message, message.GetType(), MappingManagerFile.MessageMappings[message.GetType()]); 

Так что ухудшает производительность. Нужно ли нам утилизировать после использования, или automapper самостоятельно заботиться? В диспетчере задач компонент, который делает это преобразование, занимает много памяти.

Итак, пожалуйста, предложите, какие изменения нам нужно использовать для повышения производительности.

+0

* Почему старая версия и * что за 22 секунды запускается (!) Время, когда это происходит один раз при запуске программы и может выполняться async при выполнении других задач запуска? – TomTom

+0

* «Время, необходимое для инициализации отображения, составляет почти 22 секунды» *, вы можете показать код, можете ли вы определить, какой тип займет больше времени и т. Д.? – Sinatr

+0

@Sinatr. Меня беспокоит не время начала, но после фактического запроса, и нам нужно сопоставить его с использованием Mapper.Map и поиска в тех списках записей 1300 –

ответ

0

Более поздние версии AutoMapper лениво компилируют конфигурацию. Там все еще некоторое время запуска, обнаружение и сопоставление типов, но компиляция функции отображения времени выполнения выполняется лениво.

Я бы предложил попробовать версию 5.0 и сравнить цифры.

+0

Спасибо .. Я попробую и дам вам знать :) –

0

Имея, что многие объекты, сопоставленные с automapper, займут некоторое время. Вы хотите загружать свои объекты или использовать ленивую загрузку? Я видел эти проблемы в прошлом при использовании ленивой загрузки, поскольку Automapper генерирует большое количество обращений к базе данных при получении всех реляционных данных.

Желание загрузки может быть вашим лучшим выбором здесь, или я бы порекомендовал только загружать именно то, что вам нужно. Кажется, что много данных загружается сразу.

+0

@bhmhler Спасибо за объяснение, но можете ли вы сказать мне, что AutoMapper принимает заботиться об утилизации объектов или нам нужно писать. и время загрузки не вызывает беспокойства. Концерн - это когда запрос пришел, нам нужно перехватить и проверить существование, а затем Map –

+0

Automapper будет генерировать отображаемый объект, и если в DTO будет столько данных, вы получите много использования памяти. Вы должны избавиться от своей модели сообщения и модели automapped, когда вы закончите с ней. Я не думаю, что это действительно связано с самим Automapper, но, скорее, объекты, которые вы создаете, должны быть удалены. – bhmahler

+0

Да, я постараюсь таким образом :) спасибо за разъяснение –

Смежные вопросы