C和C#应用程序之间IPC的最快方法是什么?

3
我希望能够从C应用程序向C#应用程序发送大量字符串(~250000),时间小于1秒。 但是,当我使用WM_COPYDATA和SendMessage时,我的C#应用程序会挂起。 我还能做什么? 命名管道仅包含在.NET 4中,而我正在使用.NET 2。
编辑: 我将坚持使用WM_COPYDATA并将其附加到列表(这是一项快速操作)。 然后对此列表进行后处理。

1
这个SO问题提供了关于在.NET中使用共享内存的信息:https://dev59.com/d3RC5IYBdhLWcg3wAcQ3 如果进程在同一台机器上,很难比这更快了。 - Michael Burr
3个回答

5

不确定,但我认为这段代码有漏洞。它发送了几个字符串然后停止了(从C应用程序方面来看)。 - blez
1
@blez:一定要阅读该帖子底部的评论-有一些必须设置的重叠IO标志,这些标志在原始帖子中没有提到... - Reed Copsey

4

共享内存或MMF是最快的方法。它和用于数据可用性信号的内核对象一样快。更重要的是,你可以先打开共享内存,然后直接把数据放到里面(这样可以省去一次复制操作),并通知其他应用程序。其他应用程序可以直接从共享内存中消费数据(同样不需要复制)。


1

目前在win32上不是最快的,但值得研究:0mq

在Windows上使用TCP套接字,但非常高效。

对于闭源解决方案,我认为29 West的Ultra Messaging很难被超越,包括在.net中的零拷贝消息传递这一罕见功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接