5

タイトルにあるように、このサービス動作が定義されたWCFサーバーを入手しました。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]

名前付きパイプバインディングを使用していて、クライアントは次のように接続しています。

    NetNamedPipeBinding binding = new NetNamedPipeBinding();
const int maxValue = 0x40000000; // 1GB
binding.MaxBufferSize = maxValue; 
binding.MaxReceivedMessageSize = maxValue;

binding.ReaderQuotas.MaxArrayLength = maxValue;
binding.ReaderQuotas.MaxBytesPerRead = maxValue;
binding.ReaderQuotas.MaxStringContentLength = maxValue;

// receive timeout acts like a general timeout
binding.ReceiveTimeout = TimeSpan.MaxValue;
binding.SendTimeout = TimeSpan.MaxValue;

ChannelFactory<IDatabaseSession> pipeFactory = new ChannelFactory<IDatabaseSession>(binding, new EndpointAddress("net.pipe://localhost/DatabaseService"));

IDatabaseSession dbSession = pipeFactory.CreateChannel()

私が起動するすべてのクライアントは上記のコードを実行し、すべてのクライアントのCPU使用率は25%増加します(実際には5.クライアントではありませんが、この時点で実行可能なサービスはCPU容量全体のほぼ100%をカバーしています)。

私が探しているのは、CreateChannelが実際に何をしているのか(リソース割り当ての問題に関して)を教えてくれる一種のリソース(Webサイト/リストまたはあなたの強力な知識)です。

ヒント:実際に通信が行われていなくても、CPU使用率は増加し、チャネルのみが作成されます。

4

2 に答える 2

3

デバッガーを一時停止して、すべてのスレッドが停止した場所を確認します。これはおそらくコードのホットな部分です。コールスタックを見てください。

于 2012-04-24T19:40:57.137 に答える
1

特に通信がない場合でもこれが発生すると言ったので、WCF自体がそれほど多くのリソースを使用している可能性は低いです。私の推測では、それはクライアントではなくサービスの問題だと思います。サービスコンストラクターがある場合は、それを確認してください。また、とのさまざまな値を試してInstanceContextModeくださいConcurrencyMode

于 2012-04-25T12:20:23.947 に答える