4

例として:

using (Brushes.Black)
{
...
}

静的であるため、良い考えではありません。次にアプリが Brushes.Black を使用するときは、破棄されているため、問題が発生します。

ここで、Brushes.Black のみを使用している場合は、おそらくそれを破棄しなくても問題ありません。なぜなら、管理されていないリソースが 1 つだけ (できれば!) 横たわっているからです。

しかし、一般的に、多くの静的 IDisposables を使用しないようにする必要がありますか、それとも何か不足していますか?

4

2 に答える 2

3

通常はそのまま使用し、フレームワーク クラスにそれらの破棄を心配させます。

それらは、毎回作成して破棄することなく使用できるように存在します。それぞれが最初に使用するときに作成され、ハッシュ テーブルにキャッシュされます。フレームワーク クラスは、アプリケーションの終了時にそれらを適切に破棄する責任があります。

心配する必要がある静的な IDisposables はそれほど多くありません。非常に多くのブラシを使用する場合は、とにかくループ内の色からそれらを作成することになります (もちろん、それらを破棄する責任はユーザーにあります)。

于 2009-06-15T19:32:37.750 に答える
2

例として:

using(Brushes.Black){...}

静的であるため、お勧めできません。次回アプリでBrushes.Blackを使用する場合は、破棄されているため問題が発生します。

これは単なる静的フィールドではありません-プロパティは、必要に応じて新しいインスタンスを作成するためにコードをアクティブに実行します。対応するコード(リフレクター)を見てください:

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 に答える