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

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

【问题讨论】:

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

标签: c# process ipc shared-memory


【解决方案1】:

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

【讨论】:

  • 你说的是匿名管道吗?不,我不认为我这样做了。这总是必要的吗?
  • 好吧,为了提高吞吐量,它可能会被缓冲(更少的上下文切换),因为低延迟并不总是很重要。当延迟很重要时,请消除缓冲区或强制刷新。
  • 如果有人想知道我再次尝试使用匿名管道,请确保在写入后刷新管道,这有助于改善延迟。
猜你喜欢
  • 2011-09-04
  • 2013-01-29
  • 2019-06-03
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多