WCF客户端不释放保留的内存

时间:2012-08-20 21:43:07

标签: c# wcf com

我创建了一个在exe进程中托管的wcf服务,并通过类库实例化客户端,该类调用服务。类库是用于excel 2007的com插件,因为wcf服务的原因是我们在检索大量数据时不会使用excel进程内存。

我通过使用WSHttpBinding实现ClientBase来创建wcf服务。我目前正在测试裸骨项目,唯一的功能是从wcf服务返回一条消息。

我的问题是关于创建wcf客户端的内存使用情况以及为什么它一旦处理就不会被释放。我使用地址空间监视器来监视内存使用情况并创建绑定,客户端使用大约70mb的已提交内存。

有关wcf内存使用情况或GC for com dlls的任何信息都很有用

由于

2 个答案:

答案 0 :(得分:0)

Heres写了一篇文章:

http://www.danrigsby.com/blog/index.php/2008/02/26/dont-wrap-wcf-service-hosts-or-clients-in-a-using-statement/

此外,下面是一个类似于你的帖子,之前发布过。伊戈尔泽瓦卡回答说。希望它可以增加更多的知识。

this.Dispose() doesn't release memory used by Form after closing it.

答案 1 :(得分:0)

与.net中的垃圾收集方式相同。它在各种各样的地方都有优势,但在某些地方似乎是一种阻碍。您可能会发现 - 并且我有点夸张 - 当您处理1个表单并创建新实例时,它会重用该内存空间。虽然我对此表示怀疑。

无论如何...... .net中的垃圾收集很有意思。

它最终会被清理干净......只是在不确定的时间内。

我相信有一个强制垃圾收集的命令

Best Practice for Forcing Garbage Collection in C#

当然它有点像打斗俱乐部 - 不要谈论山雀,如果你找到它,你可能会希望你没有

GC.Collect();

IIRC

还有一个过载需要一个bool。当你打电话给它时,它也会通过所有部分强制它们。有几种易于谷歌的配置模式。 Juval Lowry在他的组件书中深入探讨了这些内容。