是否应重用变量以优化资源利用率?

Pau*_*tto 5 c# memory-management global-variables

我正在使用Microsoft Visual C#2010.我有几种方法使用大位图进行本地处理,并且可以多次调用每个方法.
我可以声明一个全局变量并重用它:

Bitmap workPic, editPic;
...
void Method1() {
    workPic = new Bitmap(editPic);
    ...
}
void Method2() {
    workPic = new Bitmap(editPic.Width * 2, editPic.Height * 2);
    ...
}
Run Code Online (Sandbox Code Playgroud)

或者在每个方法中声明一个局部变量:

Bitmap editPic;
...
void Method1() {
    Bitmap workPic = new Bitmap(editPic);
    ...
}
void Method2() {
    Bitmap workPic = new Bitmap(editPic.Width * 2, editPic.Height * 2);
    ...
}
Run Code Online (Sandbox Code Playgroud)

第二种方法更适用于代码清晰度(局部使用的局部变量).资源利用方面有区别吗?

Pat*_*man 3

如果您打算保留分配给您的workPic方法之后可以再次使用的内存,您应该将其注册为类变量。如果没有,您可以通过让它超出范围来释放内存(总是一个好主意)。

分配一个变量对于管理内存的框架来说并不重要。仅当您在紧密循环内重新创建变量时,您才可以通过重用该变量受益。如果您有基本类型,您甚至可以重用相同的内存。否则,仅保留对已分配内存的引用,因此您不会从中获得太多好处。

请注意,这对Dispose您来说非常重要workPic,因为现在您在后面的非托管内存中存在内存泄漏Bitmap。最好使用using.