在两个应用程序之间共享内存

Posted

技术标签:

【中文标题】在两个应用程序之间共享内存【英文标题】:sharing memory between two applications 【发布时间】:2011-12-15 04:55:50 【问题描述】:

我有两个不同的 Windows 应用程序(两个不同的人编写代码)。一种是用 C++ 编写的,另一种是用 C# 编写的。我需要一些方法来在它们之间共享 RAM 中的数据。一个必须写入数据,另一个只读取写入的数据。我应该使用什么来使其最有效和最快? 谢谢。

【问题讨论】:

【参考方案1】:

您可以使用Memory Mapped Files。

Here 是一篇描述如何使用它们的文章。

【讨论】:

它们仅限于逻辑地址空间。 (在我的情况下最大 2GB,虽然我的 RAM 是 16GB) 这不是问题,因为您可以映射多个文件。 仅供参考,第二个链接的页面丢失/禁用。【参考方案2】:

你可以使用NamedPipes。

命名管道是一种命名的单向或双工管道,用于管道服务器和一个或多个管道客户端之间的通信。命名管道的所有实例共享相同的管道名称,但每个实例都有自己的缓冲区和句柄,并为客户端/服务器通信提供单独的管道。实例的使用使多个管道客户端可以同时使用同一个命名管道。

任何进程都可以访问命名管道,但需要经过安全检查,这使得命名管道成为相关或不相关进程之间的一种简单通信形式。

【讨论】:

【参考方案3】:

使用 Windows File Mapping Object,它允许您在进程之间共享内存。

【讨论】:

【参考方案4】:

我建议您重新设计它,让它使用基于消息的通信。它具有自动内存管理功能(与共享内存相比),在 .NET 中更强大且更易于使用。虽然速度较慢。

【讨论】:

以上是关于在两个应用程序之间共享内存的主要内容,如果未能解决你的问题,请参考以下文章

在 Dalvik 中的两个进程之间共享内存

在两个进程之间共享内存(C、Windows)

在应用程序之间共享数据 - 共享内存 vs D-Bus vs 文件操作

2个进程(应用程序)之间的共享内存

不同会话之间的共享内存

Delphi XE2:在两个不同的进程之间共享一个变量?