【发布时间】:2023-03-07 12:10:01
【问题描述】:
我的代码需要帮助。
我一直在尝试使用 RedGate 来监控我的应用程序的内存使用情况,经过数小时的测试它指出了我的应用程序的非托管代码,我只能认为我的 web 服务调用是我的唯一或有点非托管的部分代码。我已经调试了几个小时,似乎无法找出真正发生的地方或事情。下面是我的代码。
private void btnstart_Click(object sender, EventArgs e)
{
btnPressed = !btnPressed //boolean
if(btnPressed)
{
myTask = Task.Factory.StartNew(() =>
{
do {
_checkMatches(token.Token);
} while (token.IsCancellationRequested != true);
},token.Token);
}
else
{
token.Cancel();
try {
Task.WaitAny(myTask);
}
catch(Exception Error) {
//Put to logs
}
finally
{
if(myTask.isCancelled || myTask.IsCompleted || myTask.IsFaulted)
{
myTask.Dispose();
}
}
}
}
private void _checkMatches(CancellationToken token)
{
try
{
if(token.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();
}
EndpointAddressBuilder ServiceEndPoint = new EndpointAddressBuilder(//Read Endpoint From Notepad);
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });//just bypassing validation for test purposes
// WebService is an ASMX web service
using (WebService.SoapClient client = new WebService.SoapClient())
{
WebService.checkResponse clientRes = client.checkClient();
if(clientRes.response == 1 || clientRes.response == 2) {
//Put to Logs
}
}
}
catch(Exception error){
//Put to logs
}
}
我似乎在这段代码中找不到任何错误。有人可以帮我解决我的非托管代码泄漏的问题吗?或者有人可以建议使用什么工具,甚至建议找到我的代码的泄漏部分?任何帮助都会很棒。
【问题讨论】:
-
客户端是如何创建的?如果使用 svcutil,我想你可能也得打电话给
client.Close() -
@leppie 客户端正在处理,为什么我们需要显式关闭,主要是处理完成工作,关闭需要做什么
-
@MrinalKamboj:我确认了,你是对的,我错了。 IIRC,我认为我遇到的问题是尝试在不处理的情况下重用客户端进行后续请求。
标签: c# winforms web-services memory-leaks unmanaged