我希望能够从C应用程序向C#应用程序发送大量字符串(~250000),时间小于1秒。 但是,当我使用WM_COPYDATA和SendMessage时,我的C#应用程序会挂起。 我还能做什么? 命名管道仅包含在.NET 4中,而我正在使用.NET 2。
编辑: 我将坚持使用WM_COPYDATA并将其附加到列表(这是一项快速操作)。 然后对此列表进行后处理。
编辑: 我将坚持使用WM_COPYDATA并将其附加到列表(这是一项快速操作)。 然后对此列表进行后处理。
最快的选项可能是使用通过P/Invoke使用命名管道。这仍然比大多数其他IPC选项具有更高的性能。
共享内存或MMF是最快的方法。它和用于数据可用性信号的内核对象一样快。更重要的是,你可以先打开共享内存,然后直接把数据放到里面(这样可以省去一次复制操作),并通知其他应用程序。其他应用程序可以直接从共享内存中消费数据(同样不需要复制)。
目前在win32上不是最快的,但值得研究:0mq
在Windows上使用TCP套接字,但非常高效。
对于闭源解决方案,我认为29 West的Ultra Messaging很难被超越,包括在.net中的零拷贝消息传递这一罕见功能。