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 중국어 웹사이트의 기타 관련 기사를 참조하세요!