【问题标题】:How can I work out why my .net service is chewing up memory?如何找出我的 .net 服务占用内存的原因?
【发布时间】:2011-09-23 13:53:41
【问题描述】:

我们有一个 .net c# 服务,当启用它时,它会消耗越来越多的内存。它有一个“服务”派生类,它基本上创建了其他对象,这些对象封装了服务要支持的各个功能。我想也许我正在创建一个对象,并且由于编程错误而没有收集垃圾。

有谁知道在不设置断点的情况下找出正在发生的事情的最佳方法?

【问题讨论】:

  • 您是否确定(如真的确定)该服务正在消耗内存? Anatomy of a “Memory Leak” 是调查原因的良好起点。
  • 在任务管理器中内存在增加。当它在 3 天后以 17k 的速度打开时,它的速度为 5GB。我能再确定一点吗?

标签: c# memory-leaks windows-services


【解决方案1】:

打开任务管理器查看内存

将每个主要的执行部分封装在一个类中(这里我使用了 BLL)

然后从 BLL 调用

然后尝试将每个顶级片段一次一个地包装在 using 语句中

using ( TheBll bll = new TheBll)
            {
                bll.ProcessStuff();
            }

这使得大部分代码在完成后都会释放,从而更容易清理内存。

然后重新运行,如果内存停止上升,或者变慢,你找到了一个cuplrit,深入那个。

如果您在使用 using 语句包装所有顶级调用后对结果感到满意,那么您可能在深入挖掘之前就完成了。 (虽然你应该挖掘,只是为了在你不着急的时候了解真正的问题)

【讨论】:

    【解决方案2】:

    你可以使用memprofilerants profiler等内存分析器,这个问题也可以帮助What Are Some Good .NET Profilers?

    它们可以让您很好地了解正在创建的对象、它们所处的世代、它们正在使用的内存等。大多数情况下,您可以使用分析器缩小问题范围。

    【讨论】:

      【解决方案3】:

      您需要使用内存分析器来查看导致内存泄漏的对象。我在这种情况下使用这个:http://www.jetbrains.com/profiler/

      【讨论】:

        【解决方案4】:

        使用 CLR Profiler。它是专门用于检查内存使用情况的分析器。

        1.1 Profiler

        2.0 Profiler

        4.0 Profiler

        【讨论】:

          【解决方案5】:

          创建一个文本日志并记录从那里发生和工作的所有事情。尤其是对于服务,这是找出问题所在的最简单方法。只需打印出事件、对象的状态及其属性。

          也许你可以通过这种方式找到一些东西。

          祝你好运

          【讨论】:

            【解决方案6】:

            您必须使用需要处置的对象。
            一些很好的例子是流和网络客户端。

            【讨论】:

            • 是的,我认为你的权利我正在创建对象,但我需要确定哪些对象。
            • 嗯,没有人比人类更擅长识别一次性物品。查看您使用的可疑类,看看它们是否有Dispose 方法。也许识别它的第一步是告诉我们该服务的作用。如果它是一个网络服务,你可能有 WebClients 未处理,或者来自网络响应的 NetworkStreams...
            【解决方案7】:

            最好的方法是运行 Visual Studio 中的 Performance Profiler。它允许您查看对象的生命周期。

            This link might be helpful

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-08-06
              • 2010-09-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-01-04
              • 2022-10-06
              相关资源
              最近更新 更多