C#-应用程序内存问题

C#-应用程序内存问题,c#,winforms,optimization,memory,memory-management,C#,Winforms,Optimization,Memory,Memory Management,我用C#编写了一个小型WinForm应用程序。生成的EXE文件大小为74 Kb,并且所有文件都与资源和所有文件大小一起179 Kb。但当我运行它时,根据任务管理器,它需要9.1mbs内存 所以我的问题是: 为什么会这样 我能做些什么来缩小这个尺寸 如果可以缩小尺寸,可以缩小多少 首先,使用任务管理器确定内存使用率充满了危险。读一读,以便对它有更清楚的了解 您还引用了哪些其他库 您正在以流或其他方式加载哪些文件 您通过P/Invoke向操作系统请求哪些资源 每个表单加载多少个实例 您创建了多少

我用C#编写了一个小型WinForm应用程序。生成的EXE文件大小为74 Kb,并且所有文件都与资源和所有文件大小一起179 Kb。但当我运行它时,根据任务管理器,它需要9.1mbs内存

所以我的问题是:

  • 为什么会这样
  • 我能做些什么来缩小这个尺寸
  • 如果可以缩小尺寸,可以缩小多少

首先,使用任务管理器确定内存使用率充满了危险。读一读,以便对它有更清楚的了解

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

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

综上所述,9.1Mb并不是很多(在一台2Gb内存规格的机器上,内存不足0.5%),更重要的是,应用程序使用9.1Mb内存,或者你是在浪费时间调查,这真的很重要吗?记住,你的时间很宝贵。您的最终用户愿意将时间花在其他事情上吗?=)

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

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);
List List=新列表();

对于(i=1;inothing It’s just on simple form.。它有一个图片框,根据一周中的某一天显示来自本地驱动器的图像。但是有一件事我设置了透明度键,以便我的图像(PNG)不要显示它们的透明区域…就是这样…感谢文章的帮助…但是仍然有一种方法可以通过应用程序优化内存利用率…不是通过我可以处理的运行代码…比如解决方案构建时之类的…只是对您给我们的信息感到惊讶,没有。我建议有pr开发软件,特别是对于复杂的GUI应用程序,最困难的一点是内存分配。C#、其他.NET语言和Java在虚拟机中都有自己的内存管理器,可以为您处理这些问题。如果你真的需要这个级别的低级别控制——记住,10MB小于2GB的机器内存的0.5%——那么,看看你对内存分配有更多控制的语言,比如C或C++。@杰瑞米,+1,我希望我想把10MB的百分比作为2GB,这比我的“不是很多”更能说明问题