2011-03-19 93 views
5


当我发出SOAP请求时我可以看到(在任务管理器中)我的应用程序的线程数从1(主线程)增加到8,这意味着7个附加线程,这部分是OK,然而,在从服务接收到响应之后,线程数量减少到4(3 +主线程),并保持这种状态直到下一个请求发生。 因为我不喜欢SOAP并且没有太多的工作,有没有人知道这是否正常,或者如果我可以杀死/停止“悬挂”线程?
使用德尔福2010SOAP请求留下线程挂起

附加信息:我在一个线程中运行的请求,是的我在Execute方法中调用“CoInitialize”和“CoUninitialize”。

测试应用程序:http://www.2shared.com/file/_dE4H-lO/soap_test_app.html

谢谢大家的时间。

+0

你在你的应用程序中创建任何线程?我问的原因是在线程中运行SOAP请求非常有用,所以它不会阻止你的主应用程序。 – 2011-03-19 12:26:54

+0

@Chris对不起,我忘了提出这个由于一些奇怪的原因,是的,我正在一个线程中运行请求,我动态创建对象并释放它们。 – ComputerSaysNo 2011-03-19 12:29:16

+0

你能提供一些示例代码吗?这样,我们可以尝试重现您的情况,并查看哪些踏板保持活动状态。 BTW:您可以使用[Process Explorer](http://technet.microsoft.com/en-us/sysinternals/bb896653)查看哪些线程处于活动状态。 – 2011-03-19 12:54:25

回答

1

该应用程序的其他部分是对SOAP堆栈中的某些内容进行refcount。这些线程不会消失,直到发生其余的清理。

如果您重复调用SOAP函数会发生什么?它是否继续每次增长3或定居下来?如果它继续增长,你就有事情要做。如果不是,它的低级功能和(可能)不是你的问题。密切留意记忆,看看它是否会随着时间流逝(特别是当你敲击它时)。

+0

线程数(第二次调用后)每增加一个请求减2,关于内存泄漏:我不确定它是否泄漏,我会在一两天内知道。 – ComputerSaysNo 2011-03-21 22:36:18

+0

使用'perfmon'来查明它是否泄漏任何东西 – ethrbunny 2011-03-22 20:07:51

+0

你能提供一个链接吗? – ComputerSaysNo 2011-03-24 09:10:15