C# で匿名パイプを使用して効率的なプロセス間通信を実現する
C# で親プロセスと子プロセス間の通信を確立する場合、効率が非常に重要です。匿名パイプは、シンプルかつ効果的な非同期のイベント駆動型通信ソリューションを提供します。
匿名パイプはプロセス間の一方向通信チャネルです。これにより、まれな通信を処理するための専用スレッドの必要性を排除しながら、データを非同期で転送できるようになります。
C# で匿名パイプを実装するには、System.IO.Pipes
名前空間を使用できます。これは、クライアントとサーバーのエンドポイントをそれぞれ作成するための NamedPipeClientStream
クラスと NamedPipeServerStream
クラスを提供します。
クライアント実装
<code class="language-csharp">using System.IO.Pipes; using System.Threading; namespace ChildProcess { class Program { static void Main(string[] args) { // 连接到服务器管道 using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "MyPipe", PipeDirection.In)) { pipeClient.Connect(); // 启动一个线程来异步读取消息 Thread readThread = new Thread(() => ReadMessages(pipeClient)); readThread.Start(); // 持续读取消息 while (true) { // 执行其他任务 } } } static void ReadMessages(NamedPipeClientStream pipeClient) { while (true) { byte[] buffer = new byte[1024]; int bytesRead = pipeClient.Read(buffer, 0, buffer.Length); if (bytesRead > 0) { // 处理接收到的消息 } } } } }</code>
サーバー側の実装
<code class="language-csharp">using System.IO.Pipes; using System.Threading.Tasks; namespace ParentProcess { class Program { static void Main(string[] args) { // 创建服务器管道 using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("MyPipe", PipeDirection.Out)) { // 等待客户端连接 pipeServer.WaitForConnection(); // 异步发送消息 Task.Run(() => WriteMessages(pipeServer)); } } static async void WriteMessages(NamedPipeServerStream pipeServer) { while (true) { // 执行其他任务 // 向管道写入消息 string message = "来自父进程的问候!"; byte[] buffer = System.Text.Encoding.UTF8.GetBytes(message); await pipeServer.WriteAsync(buffer, 0, buffer.Length); } } } }</code>
このスキームは、専用スレッドのオーバーヘッドを発生させずに、プロセス間通信の効率的かつ軽量な方法を提供します。匿名パイプと非同期操作を使用して、リアルタイムのイベント駆動型通信を確保します。
以上が匿名のパイプは、C#で効率的なプロセス間通信をどのように強化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。