【问题标题】:How might i do these IPC techinques?我该怎么做这些 IPC 技术?
【发布时间】:2009-12-14 22:40:54
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: .net ipc shared-memory windows-messages dynamic-data-exchange


    【解决方案1】:

    在 .NET 中,您可以使用:

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

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

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

    DDE - 不要使用。

    【讨论】:

    • 你能给出“DDE - 不要使用”的理由吗
    • 这篇文章没有帮助。当然可以听到不要使用它,但你没有告诉我为什么,但更重要的是我问我可以用什么来代替这些。你还没有告诉我用什么来实现相同的目标。 ATM 我不知道 DDE 做什么。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • ++(* 必填 - 至少 15 个字符)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多