2017-02-23 4 views
-3

は、私は、コードを持っているとしますループ内に大きなビットマップを再作成する前にDispose()が必要ですか?

void Method1() { 
    Bitmap bitmap1; 
    foreach (string name in OpenFileDialog1.FileNames) { 
     bitmap1 = new Bitmap(name); 
     ... // process bitmap 
     bitmap1.Dispose(); 
    } 
} 

は、ループ内で必要に応じて)廃棄(か?

+3

[残されたメモリがない場合に自動的にGCによって配置されていないネットビットマップ]の可能な重複(http://stackoverflow.com/a/5838632/448144)なぜあなたがそれを処分する必要があるのか​​を明確に記した回答が必要です。 – Nope

+4

はい、代わりに 'using'を使用してください。 –

答えて

0

ああそうです。そのビットマップオブジェクトはファイル上に開いたメモリマップを保持しています!

このコード構造としてより良い方法はusingを使用することができます。

void Method1() { 
    foreach (string name in OpenFileDialog1.FileNames) { 
     using (var bitmap1 = new Bitmap(name)) 
     { 
      ... // process bitmap 
     } 
    } 
} 
+1

'using'はすでにリンクされた複製にも含まれているようです►http://stackoverflow.com/a/5838649/448144 – Nope

+0

Bitmap1を' Bitmap'ではなく 'var'で宣言するのはなぜですか? –

+1

@PauloBarretto:私は、宣言時には常にvarを使用します。型システムは毎回正しい型を推論します。 – Joshua

関連する問題