C#2k8减少内存使用(简单的应用需要10 MB)

时间:2009-08-26 16:40:04

标签: c# visual-studio-2008 optimization memory-management

我有一个简单的C#2008应用程序,它显示一个png图片并处理一些简单的MouseEvents。

虽然它并不复杂,但它至少使用了9.5-10 MB的内存(如任务管理器所示)

我已经禁用了任何类型的错误记录,也删除了调试和跟踪符号。 “优化代码”已激活。

有没有办法减少这个?也许有一些选项作为框架的本机编译(这甚至存在于.NET吗?)

有什么想法吗?或者这只是我为.NET-Framework付出的代价?

编辑:10 MB并不多,我知道。但它将在Citrix Presentation Server(或现在称为XenApp)上运行,这意味着一台服务器上有大约30个用户。 30个用户* 10 MB = 300 MB仅适用于这个小应用程序。

提前致谢并提出最好的问候

3 个答案:

答案 0 :(得分:10)

无论您做什么,都必须在此过程中加载CLR。 10MB并不是太多的内存而且并非所有的10MB都是私有内存(可能大多数都是可共享的)。顺便说一句,它不像“如果你的简单应用程序占用10MB,使它复杂(内存方面)的两倍将需要两倍的内存(基本上,它是CLR的内存占用。)

我刚刚构建了一个简单的控制台应用程序(for(;;);)。 “资源监视器”显示它需要大约2.5MB的私有内存和大约7MB的可共享内存。

答案 1 :(得分:0)

您可以查看静态链接(http://www.codeproject.com/KB/cs/htmerge.aspx)之类的内容,但我不确定这会如何影响内存要求。

答案 2 :(得分:0)

.net在这方面的问题是内存是由GarbageCollector管理的,只有当空间不足时才会强制收集未引用的对象。

您也可以尝试手动触发垃圾收集,请参阅此处:MSDN

你可以做的特别是:

  • 尽量保持对象的引用尽可能短
  • 减少使用的系统库的数量
  • 看一下.NET Bootstrapping
  • 通过ngen.exe
  • 查看预编译程序集
  • 使用汇编程序:-)(开玩笑)