我怎样才能弄清楚我的.net服务占用内存的原因

本文关键字:内存 服务 net 我的 弄清楚 | 更新日期: 2023-09-27 18:00:40

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

有人知道在不设置断点的情况下了解情况的最佳方法吗?

我怎样才能弄清楚我的.net服务占用内存的原因

您可以使用内存探查器,如memprofiler、ants探查器,这个问题也可以帮助了解哪些是好的.NET探查器?

它们可以让你很好地了解正在创建的对象、它们的生成、它们正在使用的内存等。在大多数情况下,你可以使用profiler缩小问题的范围。

最好的方法是运行Visual Studio中的性能档案器。它允许您查看对象的生存期。

此链接可能对有帮助

您必须使用需要释放的对象
流和web客户端就是一些很好的例子。

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

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

祝你好运

使用CLR事件探查器。它是一个专门用于检查内存使用情况的探查器。

1.1档案器

2.0档案器

4.0档案器

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

打开任务管理器并查看内存

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

然后从BLL 呼叫

然后试着把每个最高级的部分包装在一个using语句中,一次一个

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

这使得大多数事情在代码完成后都会被释放,从而更容易清理内存。

然后重新运行,如果内存停止上升或下降,你发现了一个cuplrit,请深入该cuplrit。

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