4

私はこれを持っています:

Bitmap bmp = new Bitmap(image);
//image processing
bmp.Save(path + fileName);

bmp.Dispose()このコードの後に​​呼び出す必要があるかどうかを知りたいです。前もって感謝します。

4

5 に答える 5

6

はい。

さらに良いことに、bmp を using ブロックでラップすることもできます。これにより、破棄が処理されます。

using(var bmp = new Bitmap(image))
{
    bmp.Save(...);
}

Saveの唯一の目的は、イメージを指定されたファイルに保存することです。ビットマップ オブジェクトは変更されません。

于 2013-08-08T06:59:11.857 に答える
6

usingブロックとPath.Combine

using(var bmp = new Bitmap(image))
{
    // image processing
    bmp.Save(Path.Combine(path ,fileName));
}
于 2013-08-08T07:02:56.713 に答える
4

簡単なルールがあります。破棄可能なインスタンスを作成し、それを別の ower に渡していない場合は、それを破棄する必要があります。あなたのコードで; Bitmap を作成したので、それも破棄する必要があります。

using (Bitmap bmp = new Bitmap(image)) { // <- Creation
  // Image processing
  ...
  bmp.Save(path + fileName);
} // <- You no longer need the bitmap, let's dispose it
于 2013-08-08T07:02:39.647 に答える
2

完了した場合: はい。という事実に単純に基づいて、

  • を実装IDisposableし、
  • あなたはそれで終わりです

正直に言うと、これらの 2 点が基本的に議論のすべてです。それ以外はすべて実装の詳細です。この場合、実装の詳細はおそらく GDI+ ハンドルですが、これは適切にクリーンアップする価値があります。しかし、あなたはあなたの人生を楽にすることができますusing:

using(var bmp = new Bitmap(image))
{
    // image processing
    bmp.Save(path + fileName);
}
于 2013-08-08T06:59:58.030 に答える
2

はい、メソッドを呼び出す必要がありますDispose()。そうしないと、ガベージ コラーターがファイナライザー メソッドを呼び出す前にビットマップ リソースが使用されます。using演算子を使用するだけです:

using(var bmp = new Bitmap(image))

    {
        // image processing
        bmp.Save(path + fileName);
    }
于 2013-08-08T07:01:46.603 に答える