2011-08-24 64 views
0

我们有一个c#.NET应用程序,占地约300 MB。300MB内存占用不好?

我的问题:

  1. 你监视你的应用程序的内存占用?
  2. 这是300MB的足迹不好吗?
  3. 那里有指导吗?
+3

这只是“坏”,如果它不符合你对应用程序的期望。你有什么理由期待300MB的占用空间过大? – razlebe

+0

没有理由,只是想知道是不是有一个过度的内存足迹... – bstack

+1

好的,谢谢。我的观点是,“过度”与预期有关。如果您的程序在299MB文件中打开并阅读,则300MB的占用空间不会过大。如果你的程序是“Hello World”,那很可能是。如果没有更多的信息,就不可能告知它是否过分。最好的建议是,下面已经提供了,这只是一个问题,如果(a)你不能腾出300MB的内存,或(b)占用空间不断增加,表明存在内存泄漏。 – razlebe

回答

2

简短的回答:

我们只监测一次WPF应用程序的内存使用情况,其中又以对我们的第三方控件之一,成为相当严重的造成的错误。

由于.NET提供了一个托管框架,唯一的指导原则可能是不担心内存,只要它不成为问题。 GC可以很好地处理自己,只要他们的内存仍然可用,为什么不使用它?

那么它何时成为一个问题?当你需要开始担心时,解决内存异常可能是你的观点。我个人从来没有见过这种情况发生。

1

最重要的是它不会随着时间的推移而增长。为了正确地评估这种情况,最好在预计内存使用率很低的时候进行一些偶尔的强制垃圾回收可能会很有用。

在我们的GUI应用程序中,我们在会话关闭时这样做,每隔10分钟左右。如果人们反对在发布应用程序中强制使用GC,则可以将其作为仅调试构建功能。

+0

我们没有增加内存占用的问题,因此我们不需要强制垃圾收集。我只是担心300MB的momory足迹可能太大? – bstack

+0

@bstack:对于只有256MB内存的机器而言,它太大了。我们的应用程序,包含20个小时的dll,启动后需要250MB。这从来不担心我。这大部分是可执行的和CLR开销。托管堆几乎是空的。您可以使用“.NET Clr内存”类别中的计数器通过perfmon进行检查。 – 2011-08-24 13:35:01

1

如果内存增长在一段时间内我只会担心 - 你可能需要使用自动化测试,以便一遍又一遍地重复操作,揭露内存泄漏(见How to test a WPF user interface?

如果你是真的很担心我会考虑使用内存分析器,如Redgate ANTS Profiler或者如果你想免费试用CLRProfiler4;后者是很难使用的,但它仍然会耐心地发现内存泄漏。

+0

我们没有内存泄漏,只是担心300MB的momory足迹太大! – bstack

+0

您也可以使用内存分析器来查看分配内存的位置。 –

2

作为一项规则,静态内存占用不是一个问题,尽管它很大,除非它在目标计算机上导致问题。内存真正的问题是当你有内存泄漏时,内存在增加。

我从来不打扰的原因是,我不知道特定应用程序的内存占用是好还是差。我认为有更好的途径来识别代码中的问题,而不是集中在内存上。简而言之,如果你的代码编写得很好,并且你已经删除了不需要的引用,那么你的内存占用将是正确的。

+0

我们没有内存泄漏,只是担心300MB的momory足迹太大! – bstack

+0

这是,如果你只有200MB可用。另一方面,如果您有2GB可用,则不是。 – UrbanEsc