C# - 应用程序内存问题

时间:2010-07-31 08:55:05

标签: c# winforms optimization memory memory-management

我在C#中编写了一个小的WinForm应用程序。制作的EXE 74 Kb 并且所有资源和所有大小 179 Kb 。但是当我运行它时,根据任务管理器在内存中需要 9.1 MB

所以我的问题是:

  • 为什么会这样?
  • 我可以做些什么来缩小它的大小?
  • 如果尺寸减少可以减少多少?

3 个答案:

答案 0 :(得分:3)

首先,使用任务管理器确定内存使用情况充满了危险。阅读this article以便更清楚地了解它。

  • 您引用了哪些其他库?
  • 您正在加载哪些文件,流或其他任何方式?
  • 您通过P / Invoke从操作系统请求了哪些资源
  • 您加载了每个表单的多少个实例?
  • 您创建了多少个变量,大小是多少?

例如:

// Will take up a lot of memory!
var x = new byte[int.MaxValue];

所有这一切,9.1Mb实际上并不是很多(在使用2Gb RAM的机器上少于0.5%的内存),更重要的是,实际上你的应用程序使用9.1Mb是否重要RAM,还是你在浪费时间调查?请记住,你的时间很宝贵。您的最终用户是否会把时间花在别的东西上? =)

答案 1 :(得分:2)

可执行文件和内存使用的大小是两个完全不同的概念。例如,这个简单的程序:

class Program
{
    static void Main()
    {
        var b = new byte[int.MaxValue];
    }
}

只有4KB,但它使用了计算机上的所有可用内存并崩溃。这是为了向您展示您可以拥有一个非常简单的应用程序,但根据它的作用,它可能会占用大量内存。那么你的应用程序在做什么?

答案 2 :(得分:0)

程序的内存使用量与其二进制或资源的大小并非100%相关。

这取决于你的程序做什么。例如,如果你创建这样的东西:

List<int> list = new List<int>();
for (i=1; i<100000; i++) list.Add(i);

它将需要尽可能多的内存来存储int以及它的对象开销。

这取决于您使用过的用途。

你用winforms标记了你的帖子 - 我假设你有一个gui应用程序。 Gui的内存使用取决于使用的控件及其gui风格(例如动画,悬停效果......)

.NET有一个垃圾收集器,可以在运行时释放未使用的内存。