ホームページ >バックエンド開発 >C++ >匿名のパイプは、C#で効率的なプロセス間通信をどのように強化できますか?

匿名のパイプは、C#で効率的なプロセス間通信をどのように強化できますか?

DDD
DDDオリジナル
2025-01-26 22:06:10259ブラウズ

How Can Anonymous Pipes Enhance Efficient Inter-Process Communication in C#?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。