1

スレッド間で名前付きパイプを使用してクラス/構造体などを渡す方法を理解しようとしています(ストップウォッチを使用してパフォーマンスを測定し、他のメソッドと比較しようとしています。)

とにかく、私が見つけたすべてのドキュメントは、StreamReaderとreadlineを使用してNamedPipeServerStreamからデータを取得することについて話している。ただし、readlineは文字列ですが、文字列ではないものを渡す場合、名前付きパイプからのデータを実際に使用するにはどうすればよいですか。

ありがとう、Eyal

4

2 に答える 2

2

BinaryFormatter を使用することは、パイプ ストリームの内外でオブジェクトをシリアル化する最も簡単な方法です。[Serializable] 属性でクラスまたは構造体を装飾する必要があります。

ただし、パイプの使用は、スレッド間でデータを「渡す」ための非常に非効率的な方法です。プロセス内のすべてのスレッドは同じガベージ コレクション ヒープにアクセスできます。スレッドが同じ AppDomain で実行されている限り、シリアル化は必要ありません。オブジェクトへのアクセスを同期する必要があります。lock ステートメントを使用してください。ConcurrentQueue クラスを使用すると、非常に簡単になります。

于 2010-01-16T16:10:01.740 に答える
2

NamedPipeServerStreamはストリームなので、すぐに使用できるバイナリ データには問題ありません。でラップするのではなく、通常のストリームのように扱うだけStreamReaderです。

オブジェクトの受け渡しについて - 厳密に単一のプロセス内にいるのに、なぜ名前付きパイプを使用したのでしょうか? インメモリ プロデューサー/コンシューマー キューを作成するだけです。

于 2010-01-16T14:48:45.983 に答える