C 和 C# 应用程序之间 IPC 的最快方法是什么?
我想在不到 1 秒的时间内从 C 应用程序向 C# 应用程序发送大量字符串 (~250000)。当我使用 WM_COPYDATA 和 SendMessage 执行此操作时,我的 C# 应用程序挂起。我还能做什么?命名管道仅包含在 .NET 4 中,我正在使用 .NET 2。
编辑: 我将坚持使用 WM_COPYDATA 并附加到列表(这是一个快速操作)。然后对该列表进行后处理。
I want to send lot of strings (~250000) for <1sec from C application to a C# application. When I do it with WM_COPYDATA and SendMessage, my C# application hangs. What else can I do? Named pipes are included only in .NET 4, and I'm using .NET 2.
EDIT:
I'm gonna stick to WM_COPYDATA and appending to a list (which is a fast operation). Then post processing this list.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
最快的选择可能是通过 P/Invoke 使用 命名管道。这仍然比大多数其他 IPC 选项要高得多。
The fastest option is probably to use named pipes via P/Invoke. This is still much higher performance than most other IPC options.
共享内存或 MMF 是最快的方法。它和内核对象一样快,用于发出有关数据可用性的信号。而且,更重要的是,您可以首先打开共享内存,然后将数据直接放在那里(节省一次复制操作)并向其他应用程序发出信号。其他应用程序可以直接使用共享内存中的数据(同样,无需复制)。
Shared memory or MMF is the fastest method. It's as fast as kernel objects, used for signalling about data availability are. And, more importantly, you can first open the shared memory, then put your data directly there (saves you one copy operation) and signal to other application. That other application can consume the data directly from shared memory (again, no need to copy).
当前不是 win32 上最快的,但值得研究: 0mq
在 Windows 上使用 TCP 套接字,但非常高效。
对于闭源解决方案,我不认为 29 West 的 Ultra Messaging 可以轻易被击败,包括一个罕见的功能.net 中的零复制消息传递
Not the fastest on win32 currently, but worth investigating: 0mq
Uses TCP sockets on Windows, but very efficiently.
For a closed source solution I don't think 29 West's Ultra Messaging can easily be trumped, includes a rare feature of zero-copy messaging in .net