【问题标题】:Is a 300MB memory footprint bad? [closed]300MB 内存占用不好吗? [关闭]
【发布时间】:2011-08-24 10:13:14
【问题描述】:

我们有一个 c# .NET 应用程序,其占用空间约为 300 MB。

我的问题:

  1. 您是否监控应用程序的内存占用?
  2. 这 300MB 的占用空间很糟糕吗?
  3. 那里有指导方针吗?

【问题讨论】:

  • 只有当它不是您对应用程序的期望时,它才是“坏的”。您有任何理由预计 300MB 的占用空间会过多吗?
  • 没有理由,只是想知道内存占用过多是不是很糟糕......
  • 好的,谢谢。我的观点是,“过度”是相对于期望的。如果您的程序正在打开和读取 299MB 的文件,那么 300MB 的占用空间并不过分。如果您的程序是“Hello World”,那么它可能是。如果没有更多信息,就无法判断它是否过度。最好的建议是下面已经提供的建议,即只有在 (a) 您无法腾出 300MB 内存,或 (b) 占用空间在增长,这表明内存泄漏时才会出现问题。
  • 应用程序占用空间没有增加。因为我们可以腾出足够的内存,所以这不是问题......

标签: c# .net memory


【解决方案1】:

简答:

我们只监测过一次 WPF 应用程序的内存使用情况,后来由于我们的一个第三方控件的错误而变得相当严重。

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

那么什么时候会成为一个问题呢?当您需要开始担心时,内存不足异常可能是您的重点。不过,我个人从未见过这种情况。

【讨论】:

    【解决方案2】:

    一般来说,静态内存占用无论多么大都不是问题,除非它在目标计算机上引起问题。内存的真正问题是当你有内存泄漏时,内存在增加。

    我从不打扰的原因是我不知道特定应用程序的内存占用量是好是坏。我认为有比关注内存更好的方法来识别代码中的问题。简单来说,如果你的代码写得很好,并且你已经删除了不需要的引用,那么你的内存占用是正确的。

    【讨论】:

    • 我们没有内存泄漏,只是担心 300MB 内存占用太大!
    • 它是,如果你只有 200MB 可用。另一方面,如果您有 2GB 可用空间,则没有。
    【解决方案3】:

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

    在我们的 GUI 应用程序中,我们在会话关闭时执行此操作,大约每 10 分钟一次。如果人们反对在发布应用程序中强制执行 GC,您可以将其设为仅调试构建功能。

    【讨论】:

    • 我们没有遇到内存占用增加的问题,因此我们不需要强制垃圾回收。我只是担心 300MB 的内存占用可能太大了?
    • @bstack:对于只有 256MB 内存的机器来说,它太大了。我们的应用程序有 20 个 dll,启动后需要 250MB。这从不让我担心。其中大部分是可执行的和 CLR 开销。托管堆几乎是空的。您可以使用 perfmon 进行检查,使用“.NET Clr 内存”类别中的计数器。
    【解决方案4】:

    我只担心内存在一段时间内增长 - 您可能需要使用自动化测试一遍又一遍地重复操作以暴露此类内存泄漏(请参阅How to test a WPF user interface?

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

    【讨论】:

    • 我们没有内存泄漏,只是担心 300MB 内存占用太大!
    • 您还可以使用内存分析器查看内存分配的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2016-07-27
    • 2011-07-05
    • 2023-01-18
    • 2018-03-22
    • 2022-07-17
    相关资源
    最近更新 更多