- - PR -
ArrayListのクリア
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-08-04 17:24
クラスのPrivate変数(mTable)で、ArrayListを定義しました。
あるボタン(btnA)のClickで、Addした内容をクリアしたいと考えています。 Class XX Private mTable As ArrayList Private Sub btnA_Click.... @mTable=New AyyaList() AmTabel.Clear @とAの違いがはっきりしません。 また、@の前に、mTable=Nothingにしなくてもよいのでしょうか? | ||||
|
投稿日時: 2004-08-04 18:21
@は新しいインスタンスが生成されます。
Aはインスタンスを使いまわします。 mTable=Nothingとしなくても いずれGCがメモリを開放してくれるはずです。 | ||||
|
投稿日時: 2004-08-04 21:17
補足ですが、ArrayList自体の解放は問題ありませんが、その中に格納されているオブジェクトがDisposeを実行する必要のあるオブジェクトの場合は注意が要ります。 Disposeを必要としないオブジェクトであれば問題ありません。 ちなみに、.NETではNothingを代入するという行為それ自身に特殊な効果はありません。単にそれまで指していた参照がなくなるだけです。 | ||||
|
投稿日時: 2004-08-05 08:34
例えば、mTableに大量のオブジェクトをAddしていた場合、Aではメモリ上、問題はないのでしょうか?”使いまわし”だと、Clear前に確保されたメモリはそのままのような気がしますが。 | ||||
|
投稿日時: 2004-08-05 08:44
質問に対する、追加情報です。 Clear後の、Capacityは、前の状態のようです。 | ||||
|
投稿日時: 2004-08-05 10:03
Disposeが必要な(IDisposableインタフェースを実装する)オブジェクトを格納していたのでなければ、Clearだけでかまいません。ArrayListが確保しているメモリも、ArrayListが破棄されるときに解放されます。 #「値のコピー」と「参照のコピー」の違いを理解されていますか? #格納したオブジェクトのサイズ×Capacityのメモリが確保されているわけではないですよ #いや、もちろん、どこかでは確保されているのですが |
1