Windows 7上最快的进程间通信(IPC)方法是什么?我们想只共享一个内存块(双向)。
是ReadProcessMemory
还是其他什么?
我们想使用普通C
,但是,例如,Boost库对IPC使用了什么?
答案 0 :(得分:48)
ReadProcessMemory
甚至不应列为IPC方法;是的,它可以这样使用,但它主要用于调试目的(如果你检查它的引用,它在“调试函数”类别下),它肯定比“真正的”共享内存慢,因为它拷贝< / em>进程到指定缓冲区的内存,而真正的共享内存没有这个开销。
Windows支持的IPC方法的完整列表可用on the MSDN;仍然,如果你只有两个想要共享内存块的应用程序,你应该使用CreateFileMapping
/ MapViewOfFile
创建一个命名的内存映射文件(由页面文件支持),这应该是最多的简单快捷的方法。有关文件映射的详细信息,请参阅MSDN上的its page。
relevant Boost IPC classes可以作为共享内存的瘦包装,AFAIK它只封装对相关系统特定API的调用,但最终你会得到通常指向共享内存块的指针,所以操作应该与使用本机API一样快。
因此我建议你使用Boost.Interprocess,因为它是可移植的,C ++友好的(它提供RAII语义),并且在创建共享内存块后不会给你带来任何性能损失(它可以在共享内存上提供其他功能,但它们都是选择加入的 - 如果你只是想要共享内存,那么就可以了。)