我在VS2008中使用C#开发了一个winforms应用程序。当我运行这个应用程序时,我在任务管理器中观察到它显示消耗了80 MB的内存。 我怎样才能减少这个?即使非常小的应用程序也需要8 MB的内存......
我可以做些什么来减少内存占用?
非常感谢你。
答案 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)
你的问题显然是过早优化的气味。
您应该仅在以下情况下解决内存使用问题:
不要误解我的意思,这并不意味着你必须浪费记忆力,或者你不应该在编码时考虑记忆。我的意思是,在你的情况下,内存使用可能不是什么大问题。
答案 3 :(得分:0)
除了之前的所有好评之外,请记住您在任务管理器中看到的数字是虚拟内存,而不是物理内存。通过查看任务管理器,程序使用的实际RAM数量并不明显。此外,任务管理器正在向您展示一系列快照 - 如果您确实遇到问题,除了使用JetBrains的dotTrace进行性能分析的绝佳建议之外,您还需要使用Perfmon或其他东西来查看它。
但是,在代码运行之前,不要进行任何优化,并且具有较高的测试覆盖率,直到您知道实际需要进行优化。否则,您将面临优化不存在的问题的风险,更糟糕的是,优化错误的问题,同时忽略真正的问题或可能使问题变得更糟。< / p>