Automapper работает очень медленно при отображении 1400 записей - PullRequest
11 голосов
/ 09 ноября 2010

Я использую AUtomapper, который меня очень впечатлил, однако у меня есть сложный объект со многими вложенными коллекциями. Я использую Telerik OpenAccess, и он быстро возвращает 1400 записей, но когда я передаю его в Automapper, он замедляется до нелепого сканирования. Вот мой код для справки:

        List<DAL.Event> query = httpContext.Events.Where(e => e.Inactive != true && e.Event_Locations != null).ToList();
        Mapper.CreateMap<DAL.Event, EventDTO>();
        Mapper.CreateMap<DAL.Event_Association, EventAssociationDTO>();
        Mapper.CreateMap<DAL.Event_ExecutingUnit, EventExecutingUnitDTO>();
        Mapper.CreateMap<DAL.Event_Funding, EventFundingDTO>();
        Mapper.CreateMap<DAL.Event_Location, EventLocationDTO>();
        Mapper.CreateMap<DAL.Event_Objective, EventObjectiveDTO>();
        Mapper.CreateMap<DAL.Event_OSR, EventOSRDTO>();
        Mapper.CreateMap<DAL.Event_PaxBreakDown, EventPAXBreakDownDTO>();
        Mapper.CreateMap<DAL.Event_RegionalConsideration, EventRegionalConsiderationDTO>();
        Mapper.CreateMap<DAL.Event_ReviewStatus, EventReviewStatusDTO>();
        Mapper.CreateMap<DAL.Event_SPCalendarClone, EventSPCalendarClonesDTO>();
        Mapper.CreateMap<DAL.Event_Task, EventTasksDTO>();
        Mapper.CreateMap<DAL.Event_TSO, EventTSOsDTO>();
        Mapper.AssertConfigurationIsValid();
        Mapper.AllowNullDestinationValues = true;

        IList<EventDTO> result = Mapper.Map<List<DAL.Event>, List<EventDTO>>(query);
        return result;

HELP!

Ответы [ 4 ]

12 голосов
/ 02 сентября 2011

Я тестировал автопром. Одно ядро ​​2,0 ГГц Xeon способно обрабатывать 85 000 карт в секунду на небольшом объекте (3 свойства). Это было в 60 раз медленнее, чем копирование свойств вручную. Если хотите, я могу сравнить другие значения для вас.

11 голосов
/ 09 ноября 2010

На моей предыдущей работе была команда, которая также использовала Automapper, но в итоге они удалили ее из-за снижения производительности.

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

9 голосов
/ 09 ноября 2010

Я не думаю, что подобные инструменты предназначены для отображения большого количества записей.Я думаю, что AutoMapper предназначен для отображения модели представления и ненормально отображать 1400 записей на экране.

6 голосов
/ 19 августа 2016

Для тех, кто придет к этому позже, выпуск AutoMapper 5.x значительно улучшил производительность, где скорость отображения лишь немного ниже, чем ручное отображение (1M элементов):

  • Родной: 0,19 с
  • AutoMapper: 0,49 с
  • AutoMapper 4.2.1: 29 с
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...