我开发了一个c#.net 4应用程序,它每天在组织中的每台计算机上执行WMI查询(70,000+)。由于与此线程无关的原因,我无法从服务器运行应用程序,而是从我的Windows XP SP3框运行。该应用程序使用带有新线程的线程池为每台计算机进行查询。我的问题是,在应用程序运行一段时间后,我正在耗尽所有可用的tcp连接,导致“RPC错误”。我能够解决这个问题的一种方法是在运行查询后让每个线程休眠120秒。这个特殊的解决方案令我感到沮丧,因为在大多数情况下执行查询并在5-10秒内处理结果但我必须故意限制每个线程。如果每个线程都没有受到限制,该应用程序将运行15个小时以上。关于如何解决这个问题的任何更好的想法或建议?
答案 0 :(得分:1)
应用程序使用带有新线程的线程池为每台计算机进行查询。
糟糕的设计。我会切换到一个具有特定数量的线程的队列来处理这里的项目。这就是IIS如何做到的。
你可能会在某处暴露开放连接的数量(XP对我来说是尖叫32位 - 这是非常有限的。)
使用队列和更少的线程可以避免资源耗尽。