【发布时间】:2010-07-31 08:55:04
【问题描述】:
我用 C# 编写了一个小型 WinForm 应用程序。生成的 EXE 为 74 Kb,连同资源和所有大小 179 Kb。但是当我运行它时,根据任务管理器,它需要 9.1 MB 的内存。
所以我的问题是:
- 为什么会这样?
- 我可以做些什么来减小它的大小?
- 如果可以缩小尺寸,可以缩小多少?
【问题讨论】:
标签: c# winforms optimization memory memory-management
我用 C# 编写了一个小型 WinForm 应用程序。生成的 EXE 为 74 Kb,连同资源和所有大小 179 Kb。但是当我运行它时,根据任务管理器,它需要 9.1 MB 的内存。
所以我的问题是:
【问题讨论】:
标签: c# winforms optimization memory memory-management
首先,使用任务管理器确定内存使用情况充满危险。阅读this article 以更清楚地了解它。
例如:
// Will take up a lot of memory!
var x = new byte[int.MaxValue];
话虽如此,9.1Mb 并不是很多(在配备 2Gb RAM 的机器上不到内存的 0.5%),更重要的是,您的应用程序使用 9.1Mb 真的很重要吗RAM,还是您在浪费时间进行调查?请记住,您的时间很宝贵。您的最终用户是否愿意将时间花在其他事情上? =)
【讨论】:
可执行文件的大小和内存使用量是两个完全不同的概念。例如这个简单的程序:
class Program
{
static void Main()
{
var b = new byte[int.MaxValue];
}
}
只有 4KB,但它会使用您计算机上的所有可用 RAM 并崩溃。这是为了向您展示您可以拥有一个非常简单的应用程序,但取决于它正在做什么,它可能会消耗大量内存。那么你的应用程序在做什么?
【讨论】:
程序的内存使用量并非 100% 与其二进制文件或资源的大小相关。
这取决于你的程序做什么。例如,如果您创建这样的内容:
List<int> list = new List<int>();
for (i=1; i<100000; i++) list.Add(i);
它将占用存储 int 加上它的对象开销所需的尽可能多的内存。
这取决于你用过什么。
您已使用 winforms 标记您的帖子 - 我假设您有一个 gui 应用程序。 Gui 的内存使用取决于使用的控件及其 gui 样式(例如动画、悬停效果......)
.NET 有一个垃圾收集器,可以在运行时释放未使用的内存。
【讨论】: