在两个应用程序之间共享内存
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 中更强大且更易于使用。虽然速度较慢。
【讨论】:
以上是关于在两个应用程序之间共享内存的主要内容,如果未能解决你的问题,请参考以下文章