【问题标题】:How to minimize memory usage in windows如何在 Windows 中最小化内存使用量
【发布时间】:2011-03-07 19:09:17
【问题描述】:

我用 C# 编写了一个 hello world 程序(没有任何 UI 的 Windows 应用程序)。 release-build 可执行文件只对 Thread.Sleep(50000) //50 秒执行任何操作。 我打开了 sysinternals(类似任务管理器的分析器)。这个可执行程序吃了 7MB 内存(私有字节)!! 任何人都可以解释发生了什么以及如何使内存使用量更小。 附:我还尝试使用 NGEN 预编译 .exe,但内存使用量仍然相同。

非常感谢

【问题讨论】:

  • 您选择使用.net,然后抱怨它消耗大量资源!如果您想要轻量级,那么您可以随时尝试类似offerings
  • @David,我不会说 OP 有“抱怨”,而是他们问了一个如何/为什么要理解的问题。不是每个人都知道一切,毕竟这是一个问答网站=)
  • @David:7MB 对于工作集来说已经不是很大的数量了。 ;>
  • @dthorpe 你应该看看现在 BDS 需要什么! ;-)
  • @David,我不确定从 C# 到 x86 ASM 是不是最好的跳跃。虽然我没有问 OP 存在哪些硬件/平台限制。 :P

标签: c# .net windows memory-management


【解决方案1】:

C#(和其他 JIT 编译/解释语言)通常最终会在后台自动为您做很多事情。虽然您编写的内容很简单,但在后台有很多东西在支持应用程序的 JIT 特性。

鉴于如今 2GB 的 RAM 相当普遍,因此 7MB 的内存相对较小。除非您做一些不寻常的事情或分配大量数组和数据结构,否则它可能不会上升更多。

如果它是一个基于 C# WindowsApplication 项目类型的 Hello World,并且 Program.cs 中有一个 int main 在 Windows 窗体上执行 application.run,那么不仅有很多 JIT 开销,而且还有很多Windows 窗体开销。

一天结束,我相信一切都很好。

【讨论】:

  • 感谢您的回答。那么在我的计算机上运行的其他一些进程呢,比如 SynTPEnh.exe(Synaptics TouchPad 程序)。它仅使用 1.5MB。这是否意味着它们不是用 .Net 编写的?如果我想要一些小的内存,我应该放弃 .net 并改用 C++ 吗?或者这是其他一些方法?再次感谢。顺便说一句,我上面写的测试项目是一个没有任何 UI 的 windows 应用程序。
  • 我相信你问错了问题——如果你真的需要一个内存使用较少的程序,你应该放弃.NET而使用C++。但是你确定这值得吗?
  • @user 从 .NET 迁移到 C++,你会放弃很多。这样做会伤害你。您似乎不太可能会发现 .NET 的资源使用麻烦。
【解决方案2】:

.Net 应用程序有很多基本开销,但在那之后你的内存增加应该相对较小。

示例。我的一个应用程序在加载时消耗 10MB 内存,但在从数据库加载 60k 行后仅消耗 40MB 内存,每行包含多个字符串和许多值。

在现代计算机上,一个小的固定预付费用并不是那么糟糕。可扩展性是当今的主要问题。 .Net 可以很好地进行管理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    相关资源
    最近更新 更多