Frage

Ich habe ein interessantes Designproblem und gehofft, Sie alle könnten einige Vorschläge machen. Ich benutze C# und .net 3.0

Ich habe ein sehr schönes, erweiterbares Rahmen, das oben auf der WCF aufgebaut ist und die Einrichtung von Endpunkten und die Erstellung von Verträgen automatisiert. Das System, in dem ich arbeite, könnte auf unterschiedliche Weise ausgeführt werden - Endpunkte könnten woanders im Internet sein, in verschiedenen Baugruppen auf derselben Box oder sogar im selben Prozess ausgeführt werden. WCF eignet sich hervorragend, um all das transparent zu machen, aber im letzten Fall möchte ich die Effizienz verbessern:

Ich würde gerne den Aufwand von Serialisierungsobjekten vermeiden, die nirgendwo hingehen. Es macht wirklich keinen Sinn, dies zu tun, um zwischen zwei Threads in derselben Baugruppe zu kommunizieren. Gleichzeitig möchte ich das bereits vorhandene WCF-basierte Framework verwenden, da es viel einfacher ist, wenn wir nicht zwei separate Kommunikationswege haben, abhängig vom Aufbau des Systems.

Mein erster Gedanke war, Objektzeiger in einem unsicheren Kontext zu verwenden - um die Serialisierung nicht zu bekämpfen, sondern nur die Mindestmenge zu serialisieren. Ich bin besorgt darüber, dass in asynchronen Botschaften in Umgebungen, in denen der GC aggressiv ist, die Botschaft möglicherweise verschwunden sein könnte und wird, bevor wir die Chance haben, die darin enthaltene Zeiger zu Dereference zu haben, was zu vielen Problemen führen würde.

Mein nächster Gedanke war, GCHANDLES zu verwenden, aber ich bin mir nicht sicher über ihr Verhalten - wenn auf ein GCHANDLE nicht mehr verwiesen wird, sondern einen Verweis auf ein verwaltetes Objekt enthält, werden beide von der GC gereinigt oder auch nicht? Ich mache mir Sorgen, dass ich ein großes Speicherleck einführen kann, indem ich diese benutze, da die Chance, dass eine Nachricht verloren geht .

Ein weiterer Gedanke ist, Reflection zu verwenden, um alle verwalteten Objekte zu betrachten, aber es scheint, als wäre der Overhead dafür riesig, und dieses System muss so effizient wie möglich sein.

Zusammenfassend versuche ich also, ein Objekt über einen Prozess mit WCF zu senden, ohne es zu serialisieren. Soweit ich das beurteilen kann, bedeutet es, es am Leben zu erhalten, auch wenn es vorübergehend keine Referenzen hat. Es scheint, als sollte es möglich sein, aber ich frage mich, ob ich versuche, meinen Kuchen zu haben und ihn auch zu essen.

Vielen Dank für Ihre Eingabe!

War es hilfreich?

Lösung

Ich würde das Transportprotokoll "NetnamedPipes" in WCF untersuchen, das speziell für die Kommunikation mit gleichem Maschinen und Interprozess entwickelt wurde und die am wenigsten möglich ist (einschließlich schneller binärer Serialisierung).

Marc

Andere Tipps

Schauen Sie sich die Nulltransportbindung in diesem Artikel an.

http://www.codeprroject.com/kb/wcf/nulltransportforwcf.aspx

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