我怎样才能弄清楚我的.net服务占用内存的原因
本文关键字:内存 服务 net 我的 弄清楚 | 更新日期: 2023-09-27 18:00:40
我们有一个.net c#服务,当它启动时,会占用越来越多的内存。它有一个"服务"派生类,它基本上创建了其他对象,这些对象封装了服务要支持的单个功能。我在想,也许我正在创建一个对象,而它并没有因为编程错误而被垃圾收集。
有人知道在不设置断点的情况下了解情况的最佳方法吗?
您可以使用内存探查器,如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语句包装了所有顶级调用之后,您对结果感到满意,那么在深入挖掘之前,您可能已经完成了。(尽管你应该挖掘,只是为了在不着急的时候了解真正的错误)