【问题标题】:WCF client not releasing reserved memoryWCF 客户端未释放保留的内存
【发布时间】:2012-08-20 21:43:06
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

    标签: c# wcf com


    【解决方案1】:

    这是一篇文章:

    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.

    【讨论】:

      【解决方案2】:

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

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

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

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

      Best Practice for Forcing Garbage Collection in C#

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

      GC.Collect();
      

      iirc

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 1970-01-01
        • 1970-01-01
        • 2013-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多