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

本文关键字:TCP 耗尽 多线程 应用 | 更新日期: 2023-09-27 17:50:40

我开发了一个c# .net 4应用程序,它每天在组织(70,000多台)的每台计算机上执行WMI查询。由于与这个线程无关的原因,我不能从服务器上运行应用程序,而是从我的Windows XP SP3盒子上运行。该应用程序使用线程池为每台计算机查询一个新线程。我的问题是,在应用程序运行了一段时间后,我耗尽了所有可用的tcp连接,导致"RPC错误"。我已经能够解决这个问题的一种方法是在查询运行后将每个线程休眠120秒。这种特殊的解决方案让我感到沮丧,因为在大多数情况下,查询的执行和结果的处理在5 - 10秒内完成,但我不得不故意限制每个线程。该应用程序运行了15个小时以上,而如果每个线程都没有进行节流,则该时间的一小部分。关于如何解决这个问题,有更好的想法或建议吗?

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

应用程序为每台计算机使用带有新线程的线程池进行查询。

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

您可能会在某个地方暴露打开的连接数量(XP向我显示32位-这是非常有限的)。

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