0

我记得在使用 C 和 win32 时,我有许多 IPC 技术。到目前为止,我还没有在 .NET 中遇到过它们中的任何一个,也没有在 C 之外看到它们,所以我想我想问我如何使用这些进程间通信技术?

  1. 共享/全局内存。只需分配可以由另一个进程更改而没有任何信号的 ram。

  2. 窗口消息。我记得使用 SendMessage 并使用 WM_USER + N 并在我触摸共享内存时告诉另一个应用程序,要求它更改文件或设置,有时还告诉其他应用程序我输入了一些击键来充当宏,因为我有时会感到懒惰。

  3. 动态数据交换。我尝试过,但永远无法让它发挥作用。据我所知(警告这可能是完全错误的),您将自己注册到全局消息或事件,另一个应用程序(通常是您的)将发送消息,这两个左右的应用程序可以相互通信,发布消息,您可以进行集成以这种方式在两个应用程序之间。我很想知道是什么取代了它。

还有一些我知道仍在使用和看到的命名管道。我记得人们推荐 IPC 的套接字,但我从不喜欢这样做,我知道它仍然存在并且可以在需要时使用。

我还想念什么,是什么取代了这种技术?我知道有很酷的全局互斥锁。我仍在寻找一种在两个应用程序之间发送消息的现代方式(第 2 点)。我一直想知道是否存在某种不在管道中的 FIFO 队列。就像 Windows 消息一样,除了我可以推送数据(如 1k)而不是每次发送消息和分配全局内存。

-编辑-凹凸。这个线程目前仍然与我相关。

4

2 回答 2

3

在 .NET 中,您可以使用:

  1. 命名管道
  2. 内存映射文件
  3. WCF

共享/全局内存在 .NET 中不容易实现,您必须对 Win32 调用进行互操作并固定托管内存以避免它被 GC 移动。

窗口消息显然只在你有窗口时才有效,无论是可见的还是隐藏的。.NET 应用程序不应使用此技术。

DDE - 不要使用。

于 2009-12-14T22:46:35.417 回答
1

尽管您知道套接字,但并不真正喜欢它,但我确实记得在某处读过,在 Windows 上,通过 localhost 的套接字确实有一个快捷路径,并且可以优化到单个内存副本的级别。但是,对于我的生活,我找不到我在哪里读到的,所以也许其他人可以链接到源。

这样做的缺点是我相信你必须有一个活动的网络代码来建立连接,但一旦建立,它实际上不会使用整个 TCP/IP 堆栈。

还有一个关于 Andrei 的帖子的注释,我测试了内存映射文件(如果内存服务,它只会在 .net 4.0 中添加本机),但我遇到了一些麻烦。它可能会起作用,但是没有太多文档,而且您仍然需要写出两个应用程序如何同步读取和写入,无论是用于通知的信号量,还是查看文件中某个位置的紧密循环.

就个人而言,在我正在开发的 APP 上,我通过 localhost 使用套接字,到目前为止还没有遇到任何大规模的性能或安全问题。但它会回到你的设计目标和安全要求。

于 2009-12-14T23:10:57.487 回答