C# 释放变量占用的内存

C# 释放变量占用的内存,c#,visual-studio,visual-studio-2010,memory-management,C#,Visual Studio,Visual Studio 2010,Memory Management,我很高兴创建自己的墙纸更换程序。我知道网上有很多东西,但我只是想学习新东西。所以,直到现在,每次我创建任何简单的程序,我都不关心RAM/内存,因为我主要是为学校创建程序,就像一次性使用程序,然后我就忘了它 但现在我正在尝试创建我想要使用的应用程序,这是我的东西。我注意到我的程序在“alt+ctrl+del”窗口中大约需要4000k,当它更改墙纸时,有时需要2000000 K,有时会下降,有时会保持如此高,直到它更改为另一个。 所以问题来了,有什么提示可以让我的应用程序在运行时使用尽可能少的内存

我很高兴创建自己的墙纸更换程序。我知道网上有很多东西,但我只是想学习新东西。所以,直到现在,每次我创建任何简单的程序,我都不关心RAM/内存,因为我主要是为学校创建程序,就像一次性使用程序,然后我就忘了它

但现在我正在尝试创建我想要使用的应用程序,这是我的东西。我注意到我的程序在“alt+ctrl+del”窗口中大约需要4000k,当它更改墙纸时,有时需要2000000 K,有时会下降,有时会保持如此高,直到它更改为另一个。

所以问题来了,有什么提示可以让我的应用程序在运行时使用尽可能少的内存(托盘图标,主窗口使用
if(formWindowsState.Minimized==WindowsState)Hide();

函数中的变量是否占用内存?范例

int function(int a){ 
int b = 0;
int c = a+b;
return c;
}
或者这些变量是在函数返回某个值后释放的

我可以使用一些提示、指南和/或文章链接,在那里我可以获得一些关于这方面的信息。新手友好的tho

编辑:
好的,我读了一些,开始处理位图,去掉了我使用的一个全局变量。。现在它稳定在4000-7000公里之间。换墙纸时稍微抬高一点,然后再降低一点。所以我想这对我来说是一种成功。还有一件事。我下载了一个大的/大的/有很多选项的程序,它可以改变墙纸,它得到了比我更多的选项,仍然需要1000-2000k,所以我现在读什么可以占用我这么多的ram。当我运行我的程序时,它大约是4100,所以我想我仍然可以做一些事情来优化它。谢谢大家的回答(tho!)

为本地声明的变量占用的内存将自动释放

当变量不再被使用时,为函数外持久存在的变量占用的内存也将被称为垃圾收集器(简称GC)的东西释放

所以不要担心,您的示例函数并没有造成内存泄漏


很难告诉你那二十万公升在哪里能用光。有一些分析器可以提供帮助(我没有推荐的,但这是Google上的第一个:)

确保在实现iDisposable接口的任何东西周围使用块。尤其是在读取文件、任何流或任何请求时。您可以在上阅读更多关于它的内容,并给出一些如何使用它的示例

如果您愿意,从程序的角度来看,内存将分为两个块。堆栈和堆

堆栈表示当前执行帧(例如,当前正在执行的函数),用于传递函数参数、返回值,并且通常存储局部变量。当当前执行帧结束时(例如,函数退出),该内存将被清除

堆表示一个内存池,可以在其中创建对象并将其存储更长的时间。通常,使用“new”操作符创建的任何内容都会进入堆,引用存在于堆栈上(对于本地上下文)。如果停止使用对已分配对象的引用,则该内存将一直被占用,直到垃圾回收器在将来某个未指定的时间运行并释放内存为止。当GC无法保证运行时-可能是程序内存不足时,或者在计划的时间间隔内等

我认为在您观察到的内存行为中,峰值是由于打开和加载资源造成的,低谷是在GC运行之后造成的。观察这一点的另一种方法是,当屏幕上显示UI时,以及当程序最小化时,查看程序的内存占用情况。当最小化时,内存占用将缩小,因为不再需要所有图形元素。当您最大化UI并重新绘制它时,内存使用会达到峰值

为了更好地理解堆栈和堆,您可以阅读以下文章:

您可能还需要研究垃圾收集:


。。。并且

堆栈上局部变量的内存空间在堆栈解卷时被回收。当方法返回时,此时堆上局部变量的引用将符合垃圾收集的条件。我会用谷歌搜索“垃圾收集管理”作为起点。仅供参考,请不要在标题前加上“Visual Studio C”之类的前缀。这就是标签的作用。明白了。对不起,我不会再那样做了。BrokenGlass:谢谢,我肯定会读到一些关于这方面的文章,有105%的几率你会忘记处理你在方法内部创建的
位图
对象。使用语句将它们的创建包装在一个
中,或者显式地调用对象上的
Dispose
方法。是的,你说得对,我没有处理位图。。嗯,我正在读一些关于记忆和c#的东西,我会尽我最大的努力使它正确。希望在此期间我能学到一些东西。谢谢大家的回答!事实上,示例函数可能会被抖动优化掉。