代码之家  ›  专栏  ›  技术社区  ›  Atmocreations

C 2K8减少内存使用(简单应用程序占用10 MB)

  •  2
  • Atmocreations  · 技术社区  · 15 年前

    我有一个简单的C 2008应用程序,它显示PNG图片并处理一些简单的鼠标事件。

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

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

    有没有办法减少这个?可能有一些选项作为框架的本机编译(这对于.NET是否存在?)

    知道吗?或者这仅仅是我为拥有.NET框架所付出的代价?

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

    事先谢谢,并致以最良好的祝愿

    3 回复  |  直到 15 年前
        1
  •  10
  •   Mehrdad Afshari    15 年前

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

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

        2
  •  0
  •   Andrew Lewis    15 年前

    你可以研究静态链接之类的东西( http://www.codeproject.com/KB/cs/htmerge.aspx 但是我不确定这会如何影响内存需求。

        3
  •  0
  •   Johannes Rudolph    15 年前

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

    您还可以尝试手动触发垃圾收集,请参见以下内容: MSDN

    你能做的特别是:

    • 尽量缩短对对象的引用
    • 减少已用系统库的数量
    • 看看.NET引导
    • 查看通过ngen.exe预编译程序集
    • 使用汇编程序:(开玩笑)