質問

おもしろい設計上の問題がありますので、皆さんがいくつかの提案をすることを望んでいました。 C#と.NET 3.0を使用しています

WCFの上に構築された非常に優れた拡張可能なフレームワークがあり、エンドポイントのセットアップと契約の作成を自動化します。私が働いているシステムはさまざまな方法で実行できます-エンドポイントはインターネット上の別の場所にあり、同じボックスの異なるアセンブリで実行されているか、同じプロセスで実行されています。 WCFはこのすべてを透過的にするのに最適ですが、最後のケースでは、効率を改善したいと思います。

実際にはどこにも行かないオブジェクトをシリアル化するオーバーヘッドを避けたいです。同じアセンブリ内の2つのスレッド間で通信するために、それを行う意味はまったくありません。同時に、システムのセットアップに応じて2つの別個の通信経路がない場合、メンテナンスがはるかに容易になるため、既に配置されているWCFベースのフレームワークを利用したいと思います。

最初に考えたのは、安全でないコンテキストでオブジェクトポインターを使用することでした。シリアル化と戦うのではなく、最小量のみをシリアル化することでした。これに対する私の懸念は、GCが攻撃的である環境の非同期メッセージでは、そのメッセージに含まれるポインターを逆参照する前にメッセージがなくなる可能性があり、おそらく多くの問題につながることです。

次の考えはGCHandlesを使用することでしたが、GCHandlesの動作については不明です。GCHandleがもう参照されておらず、管理対象オブジェクトへの参照が含まれている場合、両方ともGCによってクリーンアップされますか、それともどちらでもありませんか?メッセージを紛失する可能性が高く、Free()を呼び出すことができず、見つけることができるドキュメントが不足しているため、これらを使用して巨大なメモリリークを導入するのが心配です。 。

別の考えは、すべての管理対象オブジェクトを見るためにリフレクションを使用することですが、このオーバーヘッドは非常に大きく、このシステムは可能な限り効率的でなければなりません。

つまり、要約すると、WCFをシリアル化せずにプロセス間でオブジェクトを送信しようとしています。これは、一時的に参照がなくても、オブジェクトを存続させることを意味します。それは可能であるように思えますが、私は私のケーキを食べて、それを食べようとしているのだろうかと思います。

ご意見ありがとうございます!

役に立ちましたか?

解決

「NetNamedPipes」を調査します;同じマシンのプロセス間通信用に特別に設計された、可能な限りオーバーヘッドの少ない(高速バイナリシリアル化を含む)WCFのトランスポートプロトコル。

マーク

他のヒント

この記事のヌルトランスポートバインディングをご覧ください。

http://www.codeproject.com/KB/WCF/NullTransportForWCF.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top