我在C#,Framework 4中有一个应用程序。基本上,这个应用程序主要对事件做出反应并创建对象,释放它们,创建数据库连接并关闭它们。
现在,我们已经看到应用程序的进程有时以非常奇怪的方式增长。我们有两种不同的行为:
现在,为了向我们提供有关应用程序的更多信息,我想在我们的日志文件中添加应用程序进程的大小。是否可以通过本机框架?是否可以在C#中知道对象的大小?
我也找到了应用程序NetMemoryProfiler4,但如果可能的话,我更愿意使用嵌入式日志记录!
答案 0 :(得分:5)
您需要内存分析器来调试此类问题。例如:
另见the other question about memory leaks的建议。
基本上,这可以归结为在内存中找到留在这里的对象,而不应该留在这里。它可以是事件处理程序,它持有对其类的引用或某些对象的集合,这些对象包含对其父项的引用,等等。找到根本原因后,您可能需要重新构建应用程序以摆脱不必要的引用。这可以像添加遗忘事件取消订阅一样简单,但在非平凡的情况下可能需要应用一些结构设计模式。这部分是特定于应用程序的。
答案 1 :(得分:0)
也许Process
课程是你正在寻找的正确的东西
使用Process myProcess = Process.GetCurrentProcess()
获取当前流程
然后,您可以使用myProcess
的{{3}} WorkingSet64
,PrivateMemorySize64
等等。