【发布时间】:2013-06-19 22:09:06
【问题描述】:
我查看了 MSDN 文档,并在此代码片段中采用了推荐的模式:
BitmapSymbols temp = null;
try {
using (var source = bitmaps.Symbols) {
temp = new BitmapSymbols(source, sizeSymbols);
}
_bitmapSymbols = temp;
temp = null;
} finally {
if (temp!=null) temp.Dispose();
}
有谁知道为什么在这种情况下会报告temp?我看不到任何未处理 temp 且未设置为“null”的执行路径。提前感谢您的任何帮助。
如果我在 using 中将分配从 temp 移动到另一处,则会从 FxCop 生成相同的警告。
BitmapSymbols 类实现了IDisposable,并且是多个位图集合的包装器,可确保它们都被同时释放。
更新:
问题提出如下:
无论如何,我不明白你为什么想出这段代码而不是简单地使用:
_bitmapSymbols = new BitmapSymbols(source, sizeSymbols);
原因是如果发生异常,不遵循模式可能会导致内存泄漏。我正在编写一个游戏,用户可能会运行数小时或数天而无需重新启动,因此避免内存泄漏对于稳定性很重要。
【问题讨论】:
-
temp是否实现IDisposable? -
@DJKRAZE:是的,代码编译和运行都很好,所以
temp实现了IDisposabe;这只是 FxCop 的抱怨,但我在其他几个地方使用了相同的模式,并且在其中一些地方得到了相同的 FxCop 警告。 -
为什么要在 using.. 之外设置 temp = null?
-
@DJKRAZE:没关系;我已经尝试了两种方法,并从 FxCop 中得到了相同的警告。你能看出为什么偏爱一个而不是另一个的原因吗?我不能。
-
如果你将
temp.Dispose重写为((IDisposable)temp).Dispose();如果它在编译时抱怨,那么只需将 temp 的值设置为null并继续
标签: c# .net static-analysis fxcop