释放变量占用的内存

时间:2012-01-25 00:29:19

标签: c# visual-studio visual-studio-2010 memory-management

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

但是现在我正在尝试创建我想要使用的应用程序,这是我的。我注意到我的程序在“alt + ctrl + del”窗口中大约需要4000k左右,当它改变壁纸时有时需要高达200,000k,有时会下降,有时会保持那么高,直到它变为另一个。 Memorytaken

所以这里有一个问题,是什么提示让我的应用程序在运行时使用最少的ram(托盘图标,主窗口使用if (FormWindowState.Minimized == WindowState) Hide();隐藏)

函数内部的变量是否占用任何内存?实施例

int function(int a){ 
int b = 0;
int c = a+b;
return c;
}

或者在函数返回一些值后释放这些变量吗?

我可以使用一些提示,指南和/或链接到文章,我可以获得有关它的一些信息。新手友好tho。

编辑: 好吧,我已经阅读了一些,开始处理位图,摆脱了我正在使用的一个全局变量..现在它稳定在4000-7000k。更换壁纸时提高一点,但然后降低到那个。所以我想这对我来说有点成功。还有一件事。我下载了一个大/大/有很多选项程序,更改壁纸,它有一个比我的更多的选项,并且它仍然需要大约1000-2000k,所以我现在读取什么可以采取如此“多”ram我的。当我运行我的程序大约4100,所以我想我仍然可以做一些事情来优化它。谢谢大家的回答! :)

2 个答案:

答案 0 :(得分:4)

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

Stack表示当前执行帧(例如当前正在执行的函数),它用于传递函数参数,返回值以及通常存储局部变量的位置。当前执行帧结束时(例如您的函数退出),该内存被清除。

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

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

您可以查看以下文章,以便更好地理解堆栈和堆:

C# Stack and Heap

What are stack and heap?

您可能还想查看垃圾收集:

Garbage collection article on MSDN

...和Value vs Reference types

答案 1 :(得分:1)

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

对于将在函数外部持久存在的变量的内存,当它们不再使用时,也将被释放,称为GarbageCollector(简称GC)。

所以不要担心,你的示例函数不会造成内存泄漏。

很难告诉你200,000l可以用完的地方。有一些可以提供帮助的个人资料(我没有推荐,但这个首先出现在Google上:http://memprofiler.com/