- PR -

ArrayListのクリア

1
投稿者投稿内容
あび
ベテラン
会議室デビュー日: 2004/07/29
投稿数: 59
投稿日時: 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にしなくてもよいのでしょうか?

burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-08-04 18:21
@は新しいインスタンスが生成されます。
Aはインスタンスを使いまわします。

mTable=Nothingとしなくても
いずれGCがメモリを開放してくれるはずです。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-08-04 21:17
引用:

burton999さんの書き込み (2004-08-04 18:21) より:
@は新しいインスタンスが生成されます。
Aはインスタンスを使いまわします。

mTable=Nothingとしなくても
いずれGCがメモリを開放してくれるはずです。


補足ですが、ArrayList自体の解放は問題ありませんが、その中に格納されているオブジェクトがDisposeを実行する必要のあるオブジェクトの場合は注意が要ります。
Disposeを必要としないオブジェクトであれば問題ありません。
ちなみに、.NETではNothingを代入するという行為それ自身に特殊な効果はありません。単にそれまで指していた参照がなくなるだけです。
あび
ベテラン
会議室デビュー日: 2004/07/29
投稿数: 59
投稿日時: 2004-08-05 08:34
引用:

burton999さんの書き込み (2004-08-04 18:21) より:
@は新しいインスタンスが生成されます。
Aはインスタンスを使いまわします。

mTable=Nothingとしなくても
いずれGCがメモリを開放してくれるはずです。



例えば、mTableに大量のオブジェクトをAddしていた場合、Aではメモリ上、問題はないのでしょうか?”使いまわし”だと、Clear前に確保されたメモリはそのままのような気がしますが。
あび
ベテラン
会議室デビュー日: 2004/07/29
投稿数: 59
投稿日時: 2004-08-05 08:44
引用:

例えば、mTableに大量のオブジェクトをAddしていた場合、Aではメモリ上、問題はないのでしょうか?”使いまわし”だと、Clear前に確保されたメモリはそのままのような気がしますが。



質問に対する、追加情報です。
Clear後の、Capacityは、前の状態のようです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-05 10:03
引用:

あびさんの書き込み (2004-08-05 08:44) より:

質問に対する、追加情報です。
Clear後の、Capacityは、前の状態のようです。


 Disposeが必要な(IDisposableインタフェースを実装する)オブジェクトを格納していたのでなければ、Clearだけでかまいません。ArrayListが確保しているメモリも、ArrayListが破棄されるときに解放されます。

#「値のコピー」と「参照のコピー」の違いを理解されていますか?
#格納したオブジェクトのサイズ×Capacityのメモリが確保されているわけではないですよ
#いや、もちろん、どこかでは確保されているのですが
1

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