C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: BitmapのDispose


(過去ログ 63 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■36319 / inTopicNo.1)  BitmapのDispose
  
□投稿者/ 若葉マーク (1回)-(2009/05/27(Wed) 13:33:36)

分類:[C#] 

ユーザコントロールのグローバルなメンバで、Bitmapを作成した場合、
コントロールの Disposeメソッドに、

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
if (disposing && (bmp != null))
{
bmp.Dispose();
}
base.Dispose(disposing);
}

というような記述は必要ですか?

あるメソッド内で作成する場合は、 using( ){ }を使用しているのですが、
グローバルなメンバの場合は、どのようにしたら良いのか分かりません。
まったくの初心者で、お恥ずかしいのですが、どうぞ、ご教授お願いします。
引用返信 編集キー/
■36326 / inTopicNo.2)  Re[1]: BitmapのDispose
□投稿者/ 渋木宏明(ひどり) (1165回)-(2009/05/27(Wed) 14:42:20)
渋木宏明(ひどり) さんの Web サイト
2009/05/27(Wed) 14:45:18 編集(投稿者)

> ユーザコントロールのグローバルなメンバで、Bitmapを作成した場合、

「グローバルなメンバ」とは?

単なるメンバと仮定すると

> というような記述は必要ですか?

は、やっとくべきですね。

アプリケーション稼働中に、そのコントロールが何回か生成・破棄されるようなシナリオで効果を発揮します。

ただ、その Bitmap をプロパティやメソッドで公開していて、どこかの誰かが受け取った Bitmap をそのオーナーであるコントロールの寿命と関係なく、いつまでも使い続ける可能性があるなら、また別の対策が必要です。

静的なメンバについては、Dispose() を呼び出すべき適切なタイミングがないので、ほったらかしておくしかありません。

引用返信 編集キー/
■36334 / inTopicNo.3)  Re[2]: BitmapのDispose
□投稿者/ 若葉マーク (2回)-(2009/05/27(Wed) 15:33:06)
No36326 (渋木宏明(ひどり) さん) に返信


とても分かりやすく、丁寧な回答をいただき、ありがとうございます。

> 静的なメンバについては、Dispose() を呼び出すべき適切なタイミングがないので、ほったらかしておくしかありません。

この点について、もうひとつだけ質問があります。
これは、アプリケーションが終了するときに、自動的に開放してくれるという理解でよいのでしょうか?

引用返信 編集キー/
■36346 / inTopicNo.4)  Re[3]: BitmapのDispose
□投稿者/ Jitta on the way (324回)-(2009/05/27(Wed) 18:10:35)
No36334 (若葉マーク さん) に返信
> ■No36326 (渋木宏明(ひどり) さん) に返信
>
>
> とても分かりやすく、丁寧な回答をいただき、ありがとうございます。
>
>>静的なメンバについては、Dispose() を呼び出すべき適切なタイミングがないので、ほったらかしておくしかありません。
>
> この点について、もうひとつだけ質問があります。
> これは、アプリケーションが終了するときに、自動的に開放してくれるという理解でよいのでしょうか?
>

アプリケーション終了まで待たなくても、GC が動く時に何処からも参照されてなければ(かつ、ジェネレーションが上がってなければ)、解放されますよ。


私の最近の理解では、IDisposable を継承しているクラスを使うなら、それはマネージ リソースしか使っていない、です。IDisposable を継承しているクラスを継承するなら、アンマネージ リソースを使っている、です。
引用返信 編集キー/
■36363 / inTopicNo.5)  Re[3]: BitmapのDispose
□投稿者/ 渋木宏明(ひどり) (1166回)-(2009/05/27(Wed) 22:44:01)
渋木宏明(ひどり) さんの Web サイト
>>静的なメンバについては、Dispose() を呼び出すべき適切なタイミングがないので、ほったらかしておくしかありません。
>
> この点について、もうひとつだけ質問があります。
> これは、アプリケーションが終了するときに、自動的に開放してくれるという理解でよいのでしょうか?

大雑把にはそうです。

正確には、静的メンバは、そのクラスが読み込まれた AppDomain が破棄される過程で破棄されます。

引用返信 編集キー/
■36366 / inTopicNo.6)  Re[4]: BitmapのDispose
□投稿者/ 若葉マーク (3回)-(2009/05/27(Wed) 22:51:17)
渋木宏明(ひどり) さん
Jitta on the way さん

明確な回答をありがとうございました。
たいへん感謝しています。

そして、マネージ リソース、アンマネージ リソース使用の判断も
どのようにしたらよいのか分かりませんでしたが、
ひとつの指針をいただき、これまで、理解できずに進めなかった部分が
少し見えてきた気分です。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -