1

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

我通过使用 WSHttpBinding 实现 ClientBase 创建了 wcf 服务。我目前正在使用一个简单的项目进行测试,唯一的功能是从 wcf 服务返回一条消息。

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

有关 com dll 的 wcf 内存使用或 GC 的任何信息都会很有用

谢谢

4

2 回答 2

0

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

无论如何.......net中的垃圾收集有点有趣。

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

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

在 C# 中强制垃圾回收的最佳实践

当然它有点像搏击俱乐部——不要谈论山雀,如果你找到了,你可能会希望你没有

GC.Collect();

iirc

dispose 也有一个带布尔值的重载。当您调用 true 时,它​​也会通过所有部分强制它们。有几种易于搜索的处置模式。Juval Lowry 在他的组件书中深入探讨了它们。

于 2012-08-20T22:49:16.607 回答
0

这是一篇文章:

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

下面还有一个和你之前发布的类似的帖子。伊戈尔·泽瓦卡回答了这个问题。希望它可以增加更多的知识。

this.Dispose() 关闭后不会释放 Form 使用的内存。

于 2012-08-20T22:07:07.590 回答