C# 中 UI 线程和子进程之间的低延迟 IPC [关闭]

Posted

技术标签:

【中文标题】C# 中 UI 线程和子进程之间的低延迟 IPC [关闭]【英文标题】:Low-Latency IPC Between UI Thread and Child Process in C# [closed] 【发布时间】:2016-01-20 23:19:34 【问题描述】:

我的程序会生成一个单独的子进程,该子进程执行的功能可能会运行很长时间。当子进程运行时,主线程(必须在主线程)上显示一个窗口窗体,显示子进程的进度。我需要设置 IPC 以便在主 UI 线程上传达子进程的当前进度状态。我能够建立一个匿名管道,但是有很大的滞后。有没有更快的方法的建议?我已经读到使用内存映射文件可以进一步减少延迟,但是我在设置它时遇到了麻烦。

【问题讨论】:

没关系,所有IPC机制都以相同的速度运行。他们都解决了同样的问题,只是方式不同。底层操作基本相同,它需要共享内存和线程上下文切换。其他方法很方便,因为您不必解决原始 MMF 需要您解决的同步问题。那种你真的不想解决的问题。命名管道和本地环回套接字也很好。 .NET 添加了远程处理和 WCF。如果您发现报告进度有延迟,那么您做错了。 您绝对必须使用单独的进程吗?你不能在你的主进程中使用工作线程吗? 我也希望它在一个单独的线程上,但是由于稳定性问题,这是不可能的 【参考方案1】:

您是否尝试过将缓冲区大小设置为 0 和/或在写入后刷新管道?

【讨论】:

你说的是匿名管道吗?不,我不认为我这样做了。这总是必要的吗? 好吧,为了提高吞吐量,它可能会被缓冲(更少的上下文切换),因为低延迟并不总是很重要。当延迟很重要时,请消除缓冲区或强制刷新。 如果有人想知道我再次尝试使用匿名管道,请确保在写入后刷新管道,这有助于改善延迟。

以上是关于C# 中 UI 线程和子进程之间的低延迟 IPC [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

IPC进程间通信/跨进程通信

IPC进程间通信/跨进程通信

节点 IPC 如何在 2 个进程之间工作

C#线程入门

进程和线程之间的通信

IPC机制总结