■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の時の方が速度面で有利と思ったからです。 なぜそう思ったのかよく分かりませんが、意味のある差はないです。
|
|