4

举个例子:

using (Brushes.Black)
{
...
}

这不是一个好主意,因为它是静态的。下次您的应用程序使用 Brushes.Black 时,您将遇到问题,因为它已被释放。

现在,如果您只使用 Brushes.Black,那么不处理它可能是可以的,因为您只会留下一个非托管资源(希望如此!)。

但是,一般来说,您应该避免使用大量静态 IDisposables,还是我遗漏了什么?

4

2 回答 2

3

通常只使用它们,让框架类担心处理它们。

它们在那里,因此您可以使用它们,而无需每次都创建和处置它们。每个都是在您第一次使用时创建的,并缓存在哈希表中。框架类负责在应用程序关闭时正确处理它们。

实际上,您应该担心的静态 IDisposable 并不多。如果你会使用大量的画笔,你可能会从一个循环中的颜色创建它们(然后你当然会负责处理它们)。

于 2009-06-15T19:32:37.750 回答
2

举个例子:

使用 (Brushes.Black) { ... }

这不是一个好主意,因为它是静态的。下次您的应用程序使用 Brushes.Black 时,您将遇到问题,因为它已被释放。

它不仅仅是一个静态字段 - 该属性会主动运行代码,以便在需要时创建新实例。只看对应的代码(Reflector):

public static Brush Black
{
    get
    {
        Brush brush = (Brush) SafeNativeMethods.Gdip.ThreadData[BlackKey];
        if (brush == null)
        {
            brush = new SolidBrush(Color.Black);
            SafeNativeMethods.Gdip.ThreadData[BlackKey] = brush;
        }
        return brush;
    }
}
于 2009-06-15T19:41:12.600 回答