Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 我该怎么做这些IPC技术?_.net_Ipc_Shared Memory_Windows Messages_Dynamic Data Exchange - Fatal编程技术网

.net 我该怎么做这些IPC技术?

.net 我该怎么做这些IPC技术?,.net,ipc,shared-memory,windows-messages,dynamic-data-exchange,.net,Ipc,Shared Memory,Windows Messages,Dynamic Data Exchange,我记得在使用C和win32的时候,我有很多IPC技术。到目前为止,我还没有在.NET中遇到它们,也没有在C之外看到它们,所以我想问一下,我该如何使用这些进程间通信技术 共享/全局内存。只需分配可以由另一个进程在没有任何信号的情况下更改的ram 窗口消息。我记得我使用SendMessage和WM_USER+N,当我触摸共享内存时告诉另一个应用程序,要求它更改文件或设置,有时告诉另一个应用程序我键入了一些按键作为宏,因为我有时感到懒惰 动态数据交换。我试过了,但没能成功。根据我的记忆(警告这可能是完

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

  • 共享/全局内存。只需分配可以由另一个进程在没有任何信号的情况下更改的ram

  • 窗口消息。我记得我使用SendMessage和WM_USER+N,当我触摸共享内存时告诉另一个应用程序,要求它更改文件或设置,有时告诉另一个应用程序我键入了一些按键作为宏,因为我有时感到懒惰

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

  • 还有一些命名管道,我知道它们仍然被使用和看到。我记得有人推荐IPC插座,但我从来不喜欢这样做,我知道它仍然存在,如果我需要的话可以使用

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

    -编辑-凹凸。此线程目前仍与我相关。

    在.NET中,您可以使用:

  • 命名管道
  • 内存映射文件
  • 周转基金
  • 共享/全局内存在.NET中不容易实现,您必须对Win32调用和pin管理内存进行互操作,以避免它被GC移动

    窗口消息显然只有在窗口可见或隐藏时才起作用。NET应用程序不应使用此技术

    DDE-不要使用。

    在.NET中,您可以使用:

  • 命名管道
  • 内存映射文件
  • 周转基金
  • 共享/全局内存在.NET中不容易实现,您必须对Win32调用和pin管理内存进行互操作,以避免它被GC移动

    窗口消息显然只有在窗口可见或隐藏时才起作用。NET应用程序不应使用此技术


    DDE-不要使用。

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

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

    Andrei在文章中还提到,我测试了内存映射文件(只有在内存可用的情况下,才在.NET4.0中添加本机文件),但遇到了一些问题。它可能会工作,但没有太多文档,您仍然需要写出两个应用程序如何同步读写,无论是用于通知的信号量,还是查看文件中某个位置的紧密循环


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

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

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

    Andrei在文章中还提到,我测试了内存映射文件(只有在内存可用的情况下,才在.NET4.0中添加本机文件),但遇到了一些问题。它可能会工作,但没有太多文档,您仍然需要写出两个应用程序如何同步读写,无论是用于通知的信号量,还是查看文件中某个位置的紧密循环


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

    你能给出一个“DDE-不要使用”的理由吗?这篇文章没有帮助。当然,听到不用它也没关系,但你没有告诉我为什么,但更重要的是,我问我可以用什么来取代这些。你没有告诉我用什么来实现同样的目标。我不知道DDE做什么。你能给我一个“DDE-不要使用”的理由吗?这篇文章没有帮助。当然,听到不用它也没关系,但你没有告诉我为什么,但更重要的是,我问我可以用什么来取代这些。你没有告诉我用什么来实现同样的目标。ATM我不知道DDE做什么。++(必需-至少15个字符)+(必需-至少15个字符)