2011-08-30 32 views
2

我想从C应用程序向C#应用程序发送大量字符串(〜250000)作为< 1秒。当我用WM_COPYDATA和SendMessage完成时,我的C#应用​​程序挂起。我还可以做些什么?命名管道只包含在.NET 4中,而我正在使用.NET 2.我要坚持使用WM_COPYDATA并追加到列表中(这是一种快速操作)。然后后处理这个列表。C和C#应用程序之间IPC最快的方​​式是什么?

+1

这个SO问题有关于在.NET中使用共享内存的信息:http://stackoverflow.com/questions/439787/how-to-implement-shared-memory-in-net如果进程在同一台机器上,很难获得比这更快的速度。 –

回答

5

最快的选择可能是使用named pipes via P/Invoke。这仍然比大多数其他IPC选项的性能高得多。

+0

不确定,但我认为这段代码是越野车。它发送一些字符串,然后停止(从C应用程序端) – blez

+1

@blez:确保阅读该帖子底部的注释 - 有一些标记用于需要设置的重叠IO,这些标记不在原来的帖子... –

1

不是最快在Win32目前,但值得一试:0mq

使用在Windows TCP套接字,但很有效。

对于一个封闭的源溶液我不认为29西方Ultra Messaging可以很容易地压倒,包括零拷贝消息的在.NET

4

共享存储器中的罕见的功能或MMF是最快的方法。它与内核对象一样快,用于发送关于数据可用性的信号。而且,更重要的是,您可以先打开共享内存,然后将数据直接放在那里(节省一次复制操作)并发送给其他应用程序。其他应用程序可以直接从共享内存中使用数据(同样,不需要复制)。

相关问题