同じマシンのAppDomains間で通信する際のパフォーマンスの低下を最小限に抑えようとしています。私のおもちゃの例では、クラスAはAppDomain 1に読み込まれます。AppDomain 2を作成し、クラス2のインスタンス(クラス2はMarshalByRefから継承します)をロードしてプロキシを返します。次に、クラス1は、値を返さないプロキシのメソッドを繰り返し呼び出します。両方のクラスが同じのAppDomainにロードされ、最初の呼び出しは(メソッドはパラメータはありません)は、第2の上の方法をrepetedly、Cross AppDomainの最小の通信パフォーマンスペナルティは何ですか?
- ないのAppDomain:2400万方法を
は、私は次のような結果を得ますコール/秒
- つのアプリケーションドメイン上述したように、この方法は、パラメータはありませんか、文字列パラメータ「出血」:340.000方法を2つの文字列の配列(/秒上記のよう
- 二つのアプリケーションドメイン一個のシリアライズパラメータを呼び出しS):私は2と3(直列化)間のパフォーマンスの低下を理解しますが、私はケース2にケース1から遅くなる100回午前なぜ64.000メソッド呼び出し/秒
、私は本当にを理解していません。私の理解では、一度プロキシが作成されると、データが1つのAppDomainから他のAppDomainにマーシャリングされていないので、その後のすべてのメソッド呼び出しが本当に速くなければなりません。誰も今AppDomainsを介して通信するのがなぜそんなに遅いのですか?私は何か間違っているのですか?
PS1。私がこれで持っている唯一のヒントはhereです: "そして、AppDomain境界を越えるコストは恥ずかしいです。"私は彼が逐次化に言及していると推測していた。
PS2。私はAppDomainまたはプロキシの作成時間をカウントしません(私のベンチマークは最初のメソッド呼び出しから始まります)
PS3。 WinXP SP3マシンで.NET 3.5を使用しています。また、.NET 4.0 Beta 1でも大きな違いはありませんでした。
+1私はあなたに完全に同意します。簡単な直接メソッド呼び出しは非常に簡単です。 ** remoting **によるメソッド呼び出しは、はるかに重くなります。オーバーヘッドははるかに大きいです。実際の唯一の解決策は、AppDomainの通信の速度に依存しない優れたアプリケーション設計です。 – jpbochi