【发布时间】:2011-10-16 19:27:13
【问题描述】:
我正在对我的项目进行完整的代码分析,它说它有 500 个问题。我现在已经将它归结为 300,但我正在努力解决一个我似乎无法找到解决方案的问题。
规则CA2000 规定:
如果一次性对象在所有对它的引用都超出范围之前没有被显式释放,那么当垃圾收集器运行对象的终结器时,该对象将在某个不确定的时间被释放。因为可能会发生异常事件,阻止对象的终结器运行,所以应该显式地释放对象。
可以在上面链接的页面上找到有关该规则的更多信息。
规则失败的代码是这样的:
internal Window(Game game, Control parent, string title, bool visible)
: base(game, parent, visible, new ScreenspaceRectangle(game, Color.Black, Vector.Zero, Vector.Zero))
{
}
描述是:
CA2000 : Microsoft.Reliability : 在方法 'Window.Window(Game, Control, string, bool)' 中,调用 System.IDisposable.Dispose 对象'new ScreenspaceRectangle(game, Color.Black, Vector.Zero, Vector。 Zero)' 在所有对它的引用都超出范围之前。
我知道这个问题可以通过在正在创建的对象周围使用“使用”语句来正常解决,以确保始终正确处理它。但是在这种情况下我该如何解决呢?
【问题讨论】:
-
为什么需要释放 ScreenspaceRectangle?
标签: c# .net code-analysis idisposable