3

我在 C# 框架 4 中有一个应用程序。基本上,这个应用程序主要对事件做出反应并创建对象,释放它们,创建数据库连接并关闭它们。

现在,我们已经看到应用程序的进程有时会以非常奇怪的方式增长。我们有两种不同的行为:

  1. 当应用程序“应该”保持在 500 MB 左右时,应用程序会不断增长,直到达到 4 GB 的 RAM。结果->它崩溃了!
  2. 应用程序缓慢增长到 1200 MB(30 分钟),然后突然缩小到 500 MB(在一秒钟内)......这个过程不时重复。这可以是垃圾收集器吗?

现在,为了向我们提供有关应用程序的更多信息,我想在我们的日志文件中添加应用程序进程的大小。是否可以通过本机框架?是否可以在 C# 中知道对象的大小?

我还找到了应用程序 NetMemoryProfiler4,但如果可能的话,我更愿意使用嵌入式日志记录!

4

2 回答 2

4

您需要内存分析器来调试此类问题。例如:

另请参阅有关内存泄漏的其他问题的建议。

基本上,这归结为在内存中找到不应该留在这里的对象。它可以是持有对其类的引用的事件处理程序,也可以是持有对其父对象的引用的对象集合,等等。找到根本原因后,您可能需要重组应用程序以消除不必要的引用。这可以像添加被遗忘的事件取消订阅一样简单,但在非平凡的情况下可能需要应用一些结构设计模式。这部分是非常特定于应用程序的。

于 2012-09-18T10:29:01.457 回答
0

也许Process类是你正在寻找的正确的东西。
用于Process myProcess = Process.GetCurrentProcess()获取当前进程。
然后你可以使用myProcess's属性WorkingSet64,等等PrivateMemorySize64

于 2012-09-18T10:12:30.487 回答