如何在任务管理器中减少应用程序的内存消耗

时间:2009-03-17 13:09:25

标签: c# .net winforms visual-studio-2008

我在VS2008中使用C#开发了一个winforms应用程序。当我运行这个应用程序时,我在任务管理器中观察到它显示消耗了80 MB的内存。 我怎样才能减少这个?即使非常小的应用程序也需要8 MB的内存......

我可以做些什么来减少内存占用?

非常感谢你。

4 个答案:

答案 0 :(得分:3)

任务管理器的内存编号并不总是那么尖锐,但是这个小技巧可以欺骗这个数字......不适合生产

public static void RefreshMemory() {
    try {
        Process curProc = Process.GetCurrentProcess();
        curProc.MaxWorkingSet = curProc.MaxWorkingSet;
    } catch {
        // Handle the exception
    }
}

使用JetBrains dotTrace或其他类似工具跟踪内存对象的使用情况也很有帮助。

答案 1 :(得分:2)

嗯,.NET框架有一个相当大的开销 - 最简单的“hello world”控制台应用程序有一个4 MB的工作集,正如你所观察到的那样。您可以采取一些措施来减少内存占用(减少嵌入式资源,确保在发布配置中构建等)。

但最终,.NET是针对开发人员的内存/资源效率而设计的,所以如果你的应用程序必须在非常小的高效内存空间中运行,你应该考虑用C ++或者一些来编写它。您管理自己资源的其他语言。

答案 2 :(得分:2)

你的问题显然是过早优化的气味。

您应该仅在以下情况下解决内存使用问题:

  1. 你正在开发一个没有大量可用内存的设备(例如便携式.net框架)
  2. 您的内存大小(即大约1.3gbp)
  3. 达到.net的限制
  4. 您的客户在抱怨。
  5. 不要误解我的意思,这并不意味着你必须浪费记忆力,或者你不应该在编码时考虑记忆。我的意思是,在你的情况下,内存使用可能不是什么大问题。

答案 3 :(得分:0)

除了之前的所有好评之外,请记住您在任务管理器中看到的数字是虚拟内存,而不是物理内存。通过查看任务管理器,程序使用的实际RAM数量并不明显。此外,任务管理器正在向您展示一系列快照 - 如果您确实遇到问题,除了使用JetBrains的dotTrace进行性能分析的绝佳建议之外,您还需要使用Perfmon或其他东西来查看它。

但是,在代码运行之前,不要进行任何优化,并且具有较高的测试覆盖率,直到您知道实际需要进行优化。否则,您将面临优化不存在的问题的风险,更糟糕的是,优化错误的问题,同时忽略真正的问题或可能使问题变得更糟。< / p>