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

わんくま同盟

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

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


(過去ログ 164 を表示中)
■94980 / )  Re[1]: ImageListのImage.Dispose
□投稿者/ Hongliang (1048回)-(2020/06/08(Mon) 19:26:40)
> ●(質問1)
> 現在は、破棄用のフィールド変数を用意して、ImageListにAddする時に破棄用のフィールド変数
> にも同じImageをAddして以下のようにコーディングしています。
> でも★1でFalseと判定され、ResetImageListでDisposeしているImageはImageList内のImageと
> 別の参照と判定されます。
> これだとResetImageList内でImageListのImageをDisposeできていなのか?と思い質問しました。
> この認識が正しいなら、ちゃんとDisposeするには、どうすればよいか教えてください。
ImageList::Clearを呼び出せば、内部でよろしくやってくれます。
ちなみにそもそもImageListはImageオブジェクトとして保持してるわけではありません。
もちろんImageListからImageとして取り出した分については、取り出した人がDisposeする責任を持ちます。

> ●(質問2)
> https://stackoverflow.com/questions/9515759/disposing-an-imagelist
> の一番最後の所に「ImageListは、イメージを追加すると、元のイメージではなくコピーを追加する」
> みたいなことが書いてあるので、★★2の箇所でオリジナル画像をDisposeしているのですが、
> この認識は正しいですか?
そうですね。
ImageListにAddするためだけにNew Bitmapしてるなら、Usingしてしまった方が楽でしょう。

> ●(質問3)
> どこかのサイトでコントロールを動的に追加削除する場合(今回はコントロールではありませんが)
> はClearしてからDisposeとあったので、以来そのようにコーディングしていますが、
Controlの場合、親のDisposeを呼べばControlsに含まれるDisposeも再帰的に呼び出されますが、親から外した場合Disposeは外した側の責任になります。

> どうせ破棄するものを、一旦変数に退避しているので、無駄にメモリを使っているようにも
> 思うのですがどうなんでしょう?

ちょっと主張がよく分かりませんでした。

> ローカル変数にせずに、フィールド変数としているのはResetImageList内でローカル変数として
> 宣言するよりAddの時の方が速度面で有利と思ったからです。
なぜそう思ったのかよく分かりませんが、意味のある差はないです。
返信 編集キー/


管理者用

- Child Tree -