Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ServiceChannel对象更多地位于webapi的内存转储中_C#_.net_Wcf_Webapi - Fatal编程技术网

C# ServiceChannel对象更多地位于webapi的内存转储中

C# ServiceChannel对象更多地位于webapi的内存转储中,c#,.net,wcf,webapi,C#,.net,Wcf,Webapi,我有一个webapi,它反过来调用许多wcf服务,在一段时间内w3p内存不断增长,我们必须重新启动Apppool。在进行内存转储之后,我可以看到在一段时间内创建了更多的ServiceChannel对象。这可能是什么原因?我可以看到,无论何时创建wcfclient,都没有调用Close()函数,而是调用Abort()。这是处理客户端的正确方法吗?您需要像往常一样调用Dispose或Close,但这还不够,因为: C#using语句导致调用Dispose()。这与发生网络错误时可能引发异常的Clos

我有一个webapi,它反过来调用许多wcf服务,在一段时间内w3p内存不断增长,我们必须重新启动Apppool。在进行内存转储之后,我可以看到在一段时间内创建了更多的ServiceChannel对象。这可能是什么原因?我可以看到,无论何时创建wcfclient,都没有调用Close()函数,而是调用Abort()。这是处理客户端的正确方法吗?

您需要像往常一样调用
Dispose
Close
,但这还不够,因为:

C#
using
语句导致调用
Dispose()
。这与发生网络错误时可能引发异常的
Close()
相同

可以找到关闭WCF客户端的建议方法

同时,内存中有大量的
服务通道
,并不一定意味着它们直接连接到内存泄漏问题。它们可能仅仅意味着,在拍摄内存快照时,您的应用程序正忙于执行WCF调用


但是,如果您可以找到一个
ServiceChannel
,它应该被释放,但仍然存在于内存中,那么这将是一个很好的指示。

您需要像往常一样调用
Dispose
Close
,但这还不够,因为:

C#
using
语句导致调用
Dispose()
。这与发生网络错误时可能引发异常的
Close()
相同

可以找到关闭WCF客户端的建议方法

同时,内存中有大量的
服务通道
,并不一定意味着它们直接连接到内存泄漏问题。它们可能仅仅意味着,在拍摄内存快照时,您的应用程序正忙于执行WCF调用


但是,如果您可以找到一个
ServiceChannel
,它应该被释放,但仍然存在于内存中,那么这将是一个很好的指示。

正确的方法是调用Dispose(),而不是显式地调用Close()。Dispose()在内部调用Close()。将调用封装在using语句中。正确的方法是调用Dispose(),而不是显式调用Close()。Dispose()在内部调用Close()。将调用封装在using语句中。