|
分類:[C#]
.NETリモーティングを利用してTCPを使い分散アプリケーションを作成している者です。 本件の内容ですが、リモーティングを利用して外部(LAN)と接続されたPC間で通信を行うプログラムなのですが、 非常に処理速度が遅くなってしまいます。もちろんLANで接続しない場合と比べた場合、速度が低下するは理解出来るのですが、 ローカル内(1台のPC)でサーバとクライアントを同時に実行した場合と比べ21倍ほどの速度差があります。 プログラムの内容は、各アプリケーションがクライアント機能とサーバ機能を持ったP2Pの様な構造です。 実際のフローとしましては、
1.[PC1のクライアント] → [PC2のサーバ] 2.[PC2のサーバがスレッド生成/処理開始] 3.[PC2のサーバがクライアントから渡されたデリゲートを介して] → [PC1のクライアント]
という実装になっています。 ローカル内(1台のPC)の状態で実験した時のフローは、
1.[PC1のクライアント] → [PC1のサーバ] 2.[PC1のサーバがスレッド生成/処理開始] 3.[PC1のサーバがクライアントから渡されたデリゲートを介して] → [PC1のクライアント]
他のリモーティングの設定としましては、
System.Runtime.Serialization.Formatters.TypeFilterLevel.Full をListener側とClient側に設定(クライアントから渡されたデリゲートをサーバが実行するため) ChannelServices.RegisterChannel の ensureSecurity は false
また、このプログラムをローカル内(1台のPC)で動かした場合はCPU使用率は80%ほどなのですがLANを介した場合アイドル状態ほどしか使用率は上がらず、非常に低速ながら処理は進んでいる模様です。 何らかのボトルネックが発生していると考えられるのですが、探すことが出来ないでいます。御存知の方はご指摘頂ければ幸いです。
|