Frage

Ich versuche, eine gewisse Logik auf mehrere AppDomains parallel auszuführen. Ich tue dies, weil ich mit Legacy-Code arbeite die „un-veränderbar“ ist, und ich möchte die Leistung verbessern, indem sie einige Dinge zu parallelisieren. Das Problem ist, dass, wenn ich mehrere Instanzen innerhalb von 1 AppDomain laufen sie alle auf einige statische Datenstrukturen verlassen und stören einander.

Meine Implementierung ist einfach. Ich mag mehrere Instanzen meiner „ExecutionHarness“ Klasse laufen - jeder in seinem eigenen AppDomain - so dass ich eine Klasse „ExecutionHarnessProxy: MarshalByRefObject“ geschaffen, die ich in jedem meiner AppDomains instanziiert (seit ExecutionHarness nicht von MarshalByRefObject erben). Dann gebe ich nur die "ExecutionData [] data" Parameter auf die "ExecutionHarnessProxy.Execute ()" Methode. Dieser Kerl ruft dann „ExecutionHarness.Execute ()“ und alles ist gut.

Jetzt Mein Problem ist, dass, wenn ich meine Array von Daten an die Proxy-Klasse übergeben, es dauert ewig. Die ExecutionData Klasse hat das Attribut [Serializable], und es funktionell alles funktioniert, aber ich frage mich, ob es eine Möglichkeit, dies zu beschleunigen.

  1. Könnte es schneller sein, wenn ich es täte die serialize / deserialisieren mich, auf beiden Seiten der Grenze AppDomain?
  2. Ist all dieser Zeit Serialisierung verbrachte tun? oder ist es nur die Übertragung der serialisierten Daten zwischen AppDomains?
War es hilfreich?

Lösung

Es ist schwierig, ohne weitere Informationen zu wissen, aber von dem, was Sie beschreiben, würde ich das ExecutionData Array vermuten, ist der Schuldige.

Jedes Mal, wenn Sie eine Methode aufrufen, die diese Daten benötigt, werden Sie die Daten in die AppDomain, serialisiert und möglicherweise auch wieder aus. Wenn dieses Array groß ist, kann das auffressen ziemlich viel Verarbeitungszeit.

Es wäre besser, wenn die Daten direkt in jeder AppDomain geladen werden können, und nur die Ergebnisse der Ausführung übergibt zurück in Ihre Haupt AppDomain. Wenn Sie vermeiden können Arrays von Daten zwischen dem AppDomains vorbei, werden Sie wahrscheinlich dramatisch beschleunigen den Prozess.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top