【发布时间】:2015-11-05 12:49:08
【问题描述】:
我正在使用 Microsoft Visual C# 2010。我有几个使用大位图进行本地处理的方法,每个方法都可以调用多次。
我可以声明一个全局变量并重用它:
Bitmap workPic, editPic;
...
void Method1() {
workPic = new Bitmap(editPic);
...
}
void Method2() {
workPic = new Bitmap(editPic.Width * 2, editPic.Height * 2);
...
}
或者在每个方法中声明一个局部变量:
Bitmap editPic;
...
void Method1() {
Bitmap workPic = new Bitmap(editPic);
...
}
void Method2() {
Bitmap workPic = new Bitmap(editPic.Width * 2, editPic.Height * 2);
...
}
第二种方式更利于代码清晰(局部变量供本地使用)。资源利用方面有区别吗?
【问题讨论】:
-
如果您重复使用变量,可以进行多种优化。最有趣的可能是减少动态内存分配的数量。 (出于这个原因,Java 重写了部分 swing API,允许有点反范式的输入输出参数)。但是这个问题出现在许多小分配上,而不是这里可能的少数(大)分配。另外:在您的示例中,无论如何,无论哪种情况,位图都是重新分配的;您只是在重复使用参考。仅将reference 的范围更改为位图没有区别;自动变量不需要任何成本。
标签: c# memory-management global-variables