2016-05-23 15 views
1

Wir verwenden AutoMapper 3.1.1.0 in unserer Dot net-Anwendung. Wir haben viele Klassen, die man kartieren muss. Die Zeit für die Initialisierung des Mappings beträgt fast 22 Sekunden. Wir haben fast 1327 DTO, die zugeordnet werden müssen.AutoMapper weh Leistung in. NET-Anwendung mit mehr als 1327 DTO beim Mapping

Und wir können sagen, dass jeder DTO durchschnittlich 8 Eigenschaften hat.

Meine Sorge ist, für jede Nachricht, die wir in der Liste überprüfen von 1327 DTO abgebildet,
und verwenden Sie dann

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

So ist es Leistung weh tut. Müssen wir nach der Verwendung entsorgen, oder autmapper selbst aufpassen? Im Task-Manager benötigt die Komponente, die diese Konvertierung durchführt, viel Speicher.

Bitte schlagen Sie vor, welche Änderungen wir zur Verbesserung der Leistung benötigen.

+0

* Warum eine alte Version und * was ist 22 Sekunden Start (!) Zeit ein Problem, wenn dies beim Programmstart passiert und kann Async durchgeführt werden, während andere Startup-Dinge tun? – TomTom

+0

* "Zeit benötigt, um Mapping zu initialisieren ist fast 22 Sekunden" *, können Sie Code anzeigen, können Sie bestimmen, welcher Typ länger dauern, usw.? – Sinatr

+0

@Sinatr Mein Anliegen ist nicht zur Startzeit erforderlich, aber nach der tatsächlichen Anfrage kommen und wir müssen dies mit Mapper.Map zuordnen und in diesen 1300 Listensätzen suchen –

Antwort

0

Spätere Versionen von AutoMapper kompilieren die Konfiguration faul. Es gibt noch einige Startzeit-, Ermittlungs- und Zuordnungstypen, aber das Kompilieren der Laufzeitzuordnungsfunktion erfolgt langsam.

Ich würde vorschlagen, die Version 5.0 zu versuchen und die Zahlen zu vergleichen.

+0

Danke .. Ich werde versuchen, Sie wissen zu lassen :) –

0

Die Tatsache, dass viele Entitäten mit Auto-Mapper gemappt werden, wird einige Zeit dauern. Sind Sie bereit, Ihre Entitäten zu laden oder Lazy Loading zu verwenden? Ich habe diese Probleme in der Vergangenheit bei der Verwendung von Lazy Loading gesehen, da Automapper beim Abrufen aller relationalen Daten eine große Anzahl von Datenbanktreffern generiert.

Eager laden kann Ihre beste Wette hier sein, oder ich würde empfehlen, nur genau das zu laden, was Sie brauchen. Scheint so, als würden viele Daten gleichzeitig geladen.

+0

@bhmhler Vielen Dank für die Erklärung, aber können Sie mir sagen, dass AutoMapper nehmen Sorge für die Entsorgung der Objekte oder sollten wir schreiben müssen. und Ladezeit ist keine Sorge. Bedenken ist, wenn Anfrage kam, müssen wir abfangen und die Existenz überprüfen und dann Map –

+0

Automapper wird das gemappte Objekt generieren und wenn es so viele Daten in den DTOs gibt, werden Sie eine Menge Speicherverbrauch bekommen. Sie sollten Ihr Nachrichtenmodell und das automatisch gemappte Modell entsorgen, wenn Sie damit fertig sind. Ich denke nicht, dass dies wirklich mit Automapper selbst zusammenhängt, sondern dass die Objekte, die Sie erstellen, entsorgt werden müssen. – bhmahler

+0

Ja, ich werde versuchen auf diese Weise :) vielen Dank für die Klarstellung –