举个例子:
using (Brushes.Black)
{
...
}
这不是一个好主意,因为它是静态的。下次您的应用程序使用 Brushes.Black 时,您将遇到问题,因为它已被释放。
现在,如果您只使用 Brushes.Black,那么不处理它可能是可以的,因为您只会留下一个非托管资源(希望如此!)。
但是,一般来说,您应该避免使用大量静态 IDisposables,还是我遗漏了什么?
举个例子:
using (Brushes.Black)
{
...
}
这不是一个好主意,因为它是静态的。下次您的应用程序使用 Brushes.Black 时,您将遇到问题,因为它已被释放。
现在,如果您只使用 Brushes.Black,那么不处理它可能是可以的,因为您只会留下一个非托管资源(希望如此!)。
但是,一般来说,您应该避免使用大量静态 IDisposables,还是我遗漏了什么?
通常只使用它们,让框架类担心处理它们。
它们在那里,因此您可以使用它们,而无需每次都创建和处置它们。每个都是在您第一次使用时创建的,并缓存在哈希表中。框架类负责在应用程序关闭时正确处理它们。
实际上,您应该担心的静态 IDisposable 并不多。如果你会使用大量的画笔,你可能会从一个循环中的颜色创建它们(然后你当然会负责处理它们)。
举个例子:
使用 (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;
}
}