- PR -

dispose が必要なインスタンスを static フィールドにしたときのリソース解放

1
投稿者投稿内容
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2004-10-28 10:58
はじめまして。

ペンやブラシなどのGDIリソースなどを一つのインスタンスで共有する際、
それを static フィールドとするとアプリケーションが終了するまで解放されないという認識でいるのですが、正しいでしょうか。

public sealed class ClassName {
 public static System.Drawing.Brush =
  new System.Drawing.SolidBrush(System.Drawing.SystemColors.Highlight);
}
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-10-28 11:17
引用:

masaさんの書き込み (2004-10-28 10:58) より:
ペンやブラシなどのGDIリソースなどを一つのインスタンスで共有する際、
それを static フィールドとするとアプリケーションが終了するまで解放されないという認識でいるのですが、正しいでしょうか。


一つのインスタンスで共有という記述の正確な意味が分からないんですが、そもそもstaticにするするのはなぜなんでしょう?
# 「複数」のインスタンスでも共有したいってこと?

というのはさておき、GDIリソース?等をずっと使いまわすのは多分行儀の悪いプログラムということになるような気がします。基本的には必要なときに作成するってのがマナーじゃないですかね?
※詳しくないので思うだけです。
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2004-10-28 11:51
なちゃさん、ありがとうございます。

通常は普通にdisposeを実装したクラスを定義して
それをインスタンス化して使っているんですが、
ちょっと疑問に思ったので質問させていただいた次第です。

今回の場合、必要となるフィールド数が少ないので static にしてもいいかな、
とか思ったんですが、こういう手抜きがいけないんですよね、ほんとに^^。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-10-28 13:05
引用:

masaさんの書き込み (2004-10-28 11:51) より:

通常は普通にdisposeを実装したクラスを定義して
それをインスタンス化して使っているんですが、
ちょっと疑問に思ったので質問させていただいた次第です。

今回の場合、必要となるフィールド数が少ないので static にしてもいいかな、
とか思ったんですが、こういう手抜きがいけないんですよね、ほんとに^^。


ちなみに私が書いた前半部分は、「一つのインスタンスで共有するのに、なんでインスタンスフィールドでなくてstaticフィールドなんだろう」ということだったんですが、一つのインスタンスとはリソースにあたる方のインスタンスのことだったんですね?
Formのインスタンスと読み違えていました。一つのインスタンス「を」共有ということですね。

で、多分よろしくないと思うんですが、私はこれについては感覚で言ってるので信用しすぎないでください。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-10-28 21:03
引用:

masaさんの書き込み(2004-10-28 11:51)より:

今回の場合、必要となるフィールド数が少ないので static にしてもいいかな、


 フィールド数が少ないのと、staticにしてもいいと考えるのと、どう結びつくのでしょう?「フィールド数が多く、プロパティを作るのが面倒なので、publicアクセスにしてしまえ」とか、「このフィールドはどんな時でも同じものが見えて欲しいからstaticにしよう」だったらわかるのですが。。。
 で、(2004-10-28 10:58)のぶんだと、誰かがブラシを変えたくなったとき、どうなるのでしょう?BrushもIDisposableインタフェースを実装しているので、要らなくなったときにDisposeメソッドをコールするのは、開発者の責任です。constされておらず、かつpublicなので、誰でも変更可能ですから、誰かが不用意に変更したら、リークしますよ?
#GCが呼ばれたらDisposeもされますけどね
#いつ呼ばれるかわからないGCまで、Disposeしなくてもいいのか、という問題
_________________
1

スキルアップ/キャリアアップ(JOB@IT)