内存映射文件 VS 命名管道 - C#

Posted

技术标签:

【中文标题】内存映射文件 VS 命名管道 - C#【英文标题】:Memory Mapped File VS Named Pipe - C# 【发布时间】:2017-10-31 08:21:11 【问题描述】:

在这篇文章中: https://blogs.msdn.microsoft.com/salvapatuel/2009/06/08/working-with-memory-mapped-files-in-net-4/

它惊呼:

内存映射文件是单台机器上多个进程相互通信的最有效方式。

如果此语句有效,那么使用 MMF 进行进程间通信和使用命名管道之间究竟有什么区别?

【问题讨论】:

命名管道的优点是易于使用,但 MMF 更快。此外,命名管道可以在机器间使用,而 MMF 只能在机器内使用。 其中一个区别是,命名管道支持服务器/客户端方案,而 MMF 不支持。 当您添加使 MMF 有用所需的一切时,它很少是“最有效的”。这是一个非常原始的原语,您总是需要添加同步以确保您只读取写入的数据。在 C# 中也很难利用,它只有在使用指针时才真正有效,因此您可以直接读取或写入映射内存。大多数教程将让您使用流。命名管道也使用 MMF 来交换数据,只是它隐藏在内核中。 【参考方案1】:

命名管道用于两个或多个进程之间的短消息。 根据我的经验,它很慢。

如果您想共享大量数据,那么使用 MMF 是正确的。

【讨论】:

以上是关于内存映射文件 VS 命名管道 - C#的主要内容,如果未能解决你的问题,请参考以下文章

命名管道端口号

命名管道(C#)

如何使用命名管道通信 C 和 C# 程序

C#的命名管道(named pipe)

如何将命名管道c#服务器连接到命名管道php客户端

命名管道中的 C# 死锁