Spędziłem trochę czasu porównując tych trzech twórców map i ciekawe jest, dlaczego tak duże różnice w wydajności między emitmapperem i dowolnym z valueinjecter lub automapper (ostatnie dwa porównywane przez wydajność). Z testów w roztworze emitmapper (1000000 iteracji):Emituj mapper vs valueinjecter lub automapper performance
Auto Mapper (simple): 38483 milliseconds
Emit Mapper (simple): 118 milliseconds
Handwritten Mapper (simple): 37 milliseconds
Auto Mapper (Nested): 53800 milliseconds
Emit Mapper (Nested): 130 milliseconds
Handwritten Mapper (Nested): 128 milliseconds
Auto Mapper (Custom): 49587 milliseconds
Emit Mapper (Custom): 231 milliseconds
Również niektóre punkty odniesienia z valueinjecter prowadzona z dodatkiem emitmapper (do 10000 iteracji):
Convention: 00:00:00.5016074
Automapper: 00:00:00.1992945
Smart convention: 00:00:00.2132185
Emit mapper(each time new mapper): 00:00:00.1168676
Emit mapper(one mapper): 00:00:00.0
tam w teście odwzorowujący pierwszy emitują - został stworzony za każdym razem, w drugim - jeden program odwzorowujący dla wszystkich konwersji.
Biorąc to pod uwagę, wynik jest wartością jako wodzik (również jako automapper) wolniejszy niż w 100-krotnym czasie w stosunku do emitera odwzorowującego. Co jest przyczyną tak ogromnej różnicy w wydajności? Jeśli chodzi o mnie, obiekt do obiektu odwzorowującego nie może mieć tyle czasu w porównaniu z odręcznym maperem, ponieważ jest wąskim gardłem projektu (jeśli potrzebujemy na przykład mapować kolekcję obiektów).
W tym momencie myślę o użyciu programu odwzorowującego emisję, ale tylko z jednego powodu, dla którego nie jestem gotowy do podjęcia decyzji: emituję program odwzorowujący nieobsługiwany w ogóle przez pierwszych programistów, ale nie jestem pewien, czy jest to bardzo ważne (bardzo mała możliwość wymagania dodatkowej funkcjonalności).
Bardzo trudno wyciągnąć wnioski z danych, gdy nie wiesz, co zostało przetestowane. Automapper używa refleksji do wykonania początkowego automatycznego mapowania, a następnie buforuje wyniki. Jeśli zmienisz tę część w każdej iteracji, może ona źle działać. Prawdopodobnie uzyskasz lepsze odpowiedzi, jeśli pokażesz, w jaki sposób przeprowadziłeś testy. –
Użyłem dla drugiej części jako kodu bazowego z tej strony: http: //valueinjecter.codeplex.com/wikipage? Title = SmartConventionInjection & referringTitle = Home dla pierwszej części Użyłem projektu porównawczego projektu emitmapper ze strony internetowej emitmapper (http://emitmapper.codeplex.com) – Igor
Dzięki za dostarczenie niektórych testów porównawczych, zdecydowałem się nie używać Automappera. To wszystko spowolniło drastycznie. – Peter