2012-01-11 22 views
3

現在、.NETでWindowsサービスを作成しています。名前付きパイプを使用して他のプロセスとサービスを通信しています。 NamedPipeServerStreamのより複雑なコンストラクターには、maxNumberOfServerInstancesというわかりやすい名前のパラメーターがあります。驚くばかり。しかし、それはどういう意味ですか?NamedPipeServerStreamクラスのmaxNumberOfServerInstancesの目的は何ですか?

MSDNのドキュメントも説明するのに有用である:

同じ名前を共有するサーバーインスタンスの最大数。

大丈夫です。それはまだ私にとって、あるいは私がそれをどのように利用するかを私には分かりません。 NamedPipeServerStreamが「接続を受け取ったときにこのコードを実行する」ための代理人も受け入れると、それぞれの「サーバーインスタンス」がそのコードを実行することになります。しかし、そうではありません。

答えて

2

これは奇妙な議論です。その詳細については、基礎となるWindows API function (CreateNamedPipe)のドキュメントを参照してください。パイプはパイプバッファに非常に貴重なリソースを使用し、非ページングカーネルメモリプールから割り当てられます。 I この引数は、Windowsがプールの使用を最適化するのに役立ちます。それがどうやって行なわれたのかは絶望的に文書化されていません。

複数のクライアント接続を受け入れる1つのサービスの完全な番号は1です。同じジョブを実行する複数のサービスを実行する場合は、1つだけ増やしてください。それはかなりまれです。

+5

私はそれがかなり正しいとは思わない。複数のクライアントを同じパイプインスタンスに接続することはできません(同様に、.NET NamedPipeServerStreamインスタンスは一度に1つのクライアントにのみ接続します)。したがって、この引数に1を使用したサービスは、すべてのクライアント要求をシリアル化します。むしろ、接続プールのサイズに似ていると考えてください。サービスでは、処理できる真の同時クライアント要求の数に設定する必要があります。 –

関連する問題