2010-11-09 24 views
12

Tôi đang sử dụng AUtomapper mà tôi rất ấn tượng với tuy nhiên, tôi có một đối tượng phức tạp với nhiều bộ sưu tập lồng nhau. Tôi đang sử dụng Telerik OpenAccess và nó trả về 1400 hồ sơ nhanh chóng nhưng khi tôi vượt qua nó để Automapper và nó chậm lại để thu thập một cách vô lý. Đây là mã của tôi để tham khảo:Automapper chạy cực kỳ chậm trên bản đồ 1400 hồ sơ

 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; 

Giúp đỡ!

+0

Bạn đang sử dụng phiên bản AutoMapper nào? –

+0

Giá trị vô lý đó là gì? – Kangkan

+1

Bạn có thể muốn sử dụng một trình lược tả (tức là dấu chấm chấm) để phân tích phần nào của mã đang chạy chậm. –

Trả lời

11

Có một nhóm ở công việc trước đây của tôi cũng đang sử dụng Automapper nhưng cuối cùng họ đã xóa nó vì tác động hiệu suất.

Tôi nghĩ trong trường hợp cụ thể này, tốt nhất bạn nên tự viết mã bản đồ hoặc bắt đầu thay thế từng mã một. Có lẽ một ánh xạ đang gây ra hiệu suất xấu?

+4

Automapper là một tiện ích tiện lợi nhưng nó là đơn đặt hàng của cường độ chậm hơn so với lập bản đồ trực tiếp. Trên một dự án gần đây, nó dường như chậm hơn 1.000 lần so với thực hiện ánh xạ trực tiếp. Tôi chưa bao giờ nhìn vào mã automapper nhưng nghi ngờ rằng việc sử dụng phản xạ nặng nề của nó là thủ phạm chính cho các vấn đề về hiệu năng. Đối với các ứng dụng kiểu di chuyển dữ liệu, ánh xạ trực tiếp có lẽ là cách tiếp cận tốt nhất. –

+1

Tôi có thể đánh ngựa ở đây, nhưng cô ấy là kinh nghiệm của tôi. Nhóm của tôi cũng đã ngừng sử dụng AutoMapper, bởi vì nó có một thời gian khó ánh xạ ánh xạ hai chiều và các mối quan hệ cha/con (trong Entity Framework và Dynamic Proxies được tạo ra do Lazy Loading). Chúng tôi cũng trải qua thời gian phản ứng rất chậm và thấy đó là chai cổ chính của chúng tôi khi chúng tôi chạy một hồ sơ. Chúng tôi đã xem xét việc sử dụng những người lập bản đồ khác, nhưng cuối cùng nó đã được điều chỉnh để sử dụng trực tiếp các thực thể hoặc xử lý ánh xạ trực tiếp đến DTO của chúng tôi. – DDiVita

9

Tôi không nghĩ rằng các công cụ như thế này được thiết kế để ánh xạ quá nhiều bản ghi. Tôi nghĩ AutoMapper được thiết kế để lập bản đồ một Model xem và nó không phải là bình thường để hiển thị 1400 bản ghi trên màn hình.

+0

Tôi đang sử dụng lưới Rad Telerik tuyên bố rằng nó có thể xử lý một lượng dữ liệu đáng ghét – Ryan

+1

Danh sách chế độ xem đơn hoặc (Phân trang/Hạn chế). Lập bản đồ 1400 bản ghi không nên thực sự xảy ra ... – Bertvan

+1

Với lưới Telerik, tôi nghĩ bạn có thể tải dữ liệu theo yêu cầu. Vì vậy, nếu bạn có phân trang với 50 hồ sơ nó sẽ chỉ tải 50 và khi bạn đi đến trang tiếp theo nó tải 50 tiếp theo. Tải tất cả lên phía trước không thực sự quy mô. – Craig

12

Tôi đã tự động đánh giá điểm chuẩn. Một lõi của Xeon 2.0GHz có thể xử lý 85.000 bản đồ mỗi giây, trên một vật thể nhỏ (3 thuộc tính). Nó chậm hơn 60 lần so với việc sao chép các thuộc tính theo cách thủ công. Nếu bạn muốn, tôi có thể đánh giá các giá trị khác cho bạn.

+0

vì vậy bạn có thích viết một bản đồ tùy chỉnh từng cái một hoặc sử dụng một công cụ không? – Ehsan

+1

@Ehsan: nó phụ thuộc, đó là lý do tại sao tôi ẩn ánh xạ của tôi phía sau một giao diện. Container IoC của tôi sẽ điền vào AutoMapper hầu hết thời gian, nhưng đối với những người quan trọng thời gian tôi sẽ viết một manu-map và cấu hình cá thể đó sẽ được sử dụng. –

5

Đối với những người đến sau này, AutoMapper 5.x phát hành thực hiện cải tiến đáng kể hiệu suất, nơi tốc độ lập bản đồ là chỉ hơi chậm hơn so với bản đồ tay (1M items):

  • Quê quán: 0.19s
  • AutoMapper : 0.49s
  • AutoMapper 4.2.1: 29s
Các vấn đề liên quan