c# 多线程应用程序中的 TCP 耗尽

标签 c# tcp wmi threadpool

我开发了一个 c# .net 4 应用程序,它每天对组织中的每台计算机(超过 70,000 台)执行 WMI 查询。由于与此线程无关的原因,我无法从服务器运行该应用程序,而是从我的 Windows XP SP3 机器运行。该应用程序使用带有新线程的线程池供每台计算机进行查询。我的问题是,在应用程序运行一小段时间后,我用尽了所有可用的 TCP 连接,导致“RPC 错误”。我能够解决这个问题的一种方法是在查询运行后让每个线程休眠 120 秒。这个特殊的解决方案让我感到沮丧,因为在大多数情况下,查询的执行和结果的处理都在 5 到 10 秒内完成,但我必须有意地限制每个线程。该应用程序运行了 15 多个小时,而不是每个线程未被限制时的一小部分时间。关于如何解决此问题的任何更好的想法或建议?

最佳答案

The app uses the threadpool with a new thread for each computer to query.

糟糕的设计。如果切换到一个队列,其中有特定数量的线程在这里处理项目,我会切换。例如,IIS 就是这样做的。

您可能会在某处公开打开的连接数(XP 向我尖叫 32 位 - 这是非常有限的)。

使用队列和较少的线程可以避免资源耗尽。

关于c# 多线程应用程序中的 TCP 耗尽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22471516/

相关文章:

c# - 将对象数组从 C# 返回到 COM 中的 C

c# - 这个 Composition 是否违反了面向对象编程的任何原则?

Java:下载总是停顿

tcp - ffmpeg 编码力 rtsp 输出流使用 TCP 作为 rtsp_transport

wmi - 有没有办法通过 WMI RSOP_XXX 类读取密码策略?

powershell - Win32_NetworkAdapter.Index 和 Win32_IP4RouteTable.InterfaceIndex 不匹配

c# - 我如何使用 OnPhotonSerializeView?

c# - ASP.NET MVC 3 - 重定向到另一个操作

vb6 - 您如何知道已向 Web 服务器发出 POST 或 GET 的 Winsock 控件何时接收到所有数据?

c# - WMI:RPC 服务器不可用。 (HRESULT 异常:0x800706BA)尝试连接到远程机器时抛出