我的公司有一个应用程序,可以跟踪与各种计算机上托管的网站相关的信息。中央服务器运行Windows服务,该服务获取要检查的站点列表,然后查询在这些目标站点上运行的服务以获取可用于更新本地数据的响应。
我的任务是将多线程应用于此过程,以减少运行所有站点所需的时间(将近3000个站点需要大约8小时才能按顺序运行)。当服务没有多线程时,服务会成功运行,但是当我将工作分散到多个线程时(现在用3测试,再加上一个观察者线程),这是一个奇怪的崩溃,似乎源于对远程服务的调用。应该提供数据。这是一个SOAP / XML调用。
在测试服务器上运行时,服务只是放弃并且没有完成它的任务,但不会停止运行。当通过调试器(Dev Studio 2010)运行时,整个过程就停止了。我会运行它,几秒钟后它会停止调试,但不是因为它完成了。它不会抛出异常或给我任何消息。有了断点,我可以走到它停止的地步。事件记录引导我到同一个地方。它停止在尝试从其他站点上的Web服务获取响应的代码行上。再说一次:它只在多线程时才这样做。
我发现一些信息表明默认为2的连接数有限制。建议的解决方案是在app.config中添加一些标签,但这还没有解决问题......
<system.net>
<connectionManagement>
<add address="*" maxconnection="20"/>
</connectionManagement>
</system.net>
我仍然认为它可能与允许的连接数有关,但我无法在网上很好地找到它周围的信息。有什么直截了当的我错过了吗?任何帮助将不胜感激。
答案 0 :(得分:0)
最后,如果您100%确定这是由于多个线程,那么请锁定您的工作线程。最初说它涵盖了整个主循环。它不应该崩溃,即使它是多线程的,你已经序列化了执行。 下一步是减少线程的范围。说,有三个功能 main-while-loop,比如说f1(),f2(),f3(),然后开始锁定f2()和f3(),同时让f1解锁...如果事情有效,那么问题就在f2或f3的某处( )。 我希望你能了解我的建议
我知道这就像盲人猜大象一样,但如果您的代码使用了很多未充分记录的外部组件,那么这是您能做的最好的事情。