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

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

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

オブジェクトの破棄に関して


(過去ログ 7 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■7444 / inTopicNo.1)  オブジェクトの破棄に関して
  
□投稿者/ くし&しも 二等兵(4回)-(2006/10/12(Thu) 10:12:20)

分類:[C#] 


分類:[C#] 

いつもお世話になります。

実は以下のコードのように更新ボタンを押したときにDataViewオブジェクトをローカル変数で参照して使用しています。

このイベントは何回も呼ばれるのですが、イベントを抜けたとき参照していた
DataViewオブジェクトはメモリ領域に残っているのでしょうか?

Javaの場合はローカル変数で参照していたオブジェクトが参照されなくなると
ガーベッジコレクタがメモリから削除してくれるのですがC#の場合はどうなのかわかりません。

private void btnUpdate_Click(object sender, EventArgs e)
{
             ・
             ・
  //dt:DataTable , dv:DataView, dgv:DataGridView, bs:BindingSource
  dt.Rows[dgv.CurrentCell.RowIndex][0] = txtCord.Text;
  dt.Rows[dgv.CurrentCell.RowIndex][1] = txtName.Text;

  DataView dv = new DataView(dt);
  dv.Sort = "コード";
  dt = dv.ToTable();
  bs.DataSource = dt;
  dgv.DataSource = bs;
}
イベントを抜けたときDataViewオブジェクトはメモリに残っているのでしょうか?

お手数ですがどなたかおわかりでしたら教えてください!
よろしくお願いします。

0
引用返信 編集キー/
■7449 / inTopicNo.2)  Re[1]: オブジェクトの破棄に関して
□投稿者/ ぽぴ王子 軍曹(64回)-(2006/10/12(Thu) 11:31:22)
ぽぴ王子 さんの Web サイト

分類:[C#] 

No7444に返信(くし&しもさんの記事)

こんにちは。

> このイベントは何回も呼ばれるのですが、イベントを抜けたとき参照していた
> DataViewオブジェクトはメモリ領域に残っているのでしょうか?

残っているかもしれませんし、残っていないかもしれません。
実際にどう動いているかはCLRの中身を見ないとわからないでしょう。
(見れるのかどうかはともかくとして)

> Javaの場合はローカル変数で参照していたオブジェクトが参照されなくなると
> ガーベッジコレクタがメモリから削除してくれるのですがC#の場合はどうなのかわかりません。

C#にも(というか.NET Frameworkにも)ガベージコレクタは存在しますので、似
たような動きになるのではないでしょうか。


0
引用返信 編集キー/
■7451 / inTopicNo.3)  Re[2]: オブジェクトの破棄に関して
□投稿者/ ダッチ 伍長(48回)-(2006/10/12(Thu) 12:32:18)

分類:[C#] 

> イベントを抜けたときDataViewオブジェクトはメモリに残っているのでしょうか?

そのうちガベージコレクションが回収してくれますので、
時間の問題だと思います。

IDisposable インタフェースを実装している場合は
明示的にもう使いませんので回収してください。と宣言することが出来ます。

DataView も IDisposable を実装していますので
読んでおけば問題ないと思います。


0
引用返信 編集キー/
■7454 / inTopicNo.4)  Re[1]: オブジェクトの破棄に関して
□投稿者/ たろう 二等兵(4回)-(2006/10/12(Thu) 14:19:16)

分類:[C#] 

No7444に返信(くし&しもさんの記事)

たろうです。こんにちは

> Javaの場合はローカル変数で参照していたオブジェクトが参照されなくなると
> ガーベッジコレクタがメモリから削除してくれるのですがC#の場合はどうなのかわかりません。
>

c#もガーベッジコレクタが削除してくれるはずです。
しかしこの場合イベントを抜けてもdt = dv.ToTable(); で参照されて
いると思いますが、どうでしょうか。
わたしは参照されているので、残っている気がします。


> private void btnUpdate_Click(object sender, EventArgs e)
> {
>              ・
>              ・
>   //dt:DataTable , dv:DataView, dgv:DataGridView, bs:BindingSource
>   dt.Rows[dgv.CurrentCell.RowIndex][0] = txtCord.Text;
>   dt.Rows[dgv.CurrentCell.RowIndex][1] = txtName.Text;
>
>   DataView dv = new DataView(dt);
>   dv.Sort = "コード";
>   dt = dv.ToTable();
>   bs.DataSource = dt;
>   dgv.DataSource = bs;
> }
> イベントを抜けたときDataViewオブジェクトはメモリに残っているのでしょうか?



0
引用返信 編集キー/
■7456 / inTopicNo.5)  Re[2]: オブジェクトの破棄に関して
□投稿者/ ダッチ 伍長(49回)-(2006/10/12(Thu) 15:09:40)

分類:[C#] 

No7454に返信(たろうさんの記事)
> c#もガーベッジコレクタが削除してくれるはずです。
> しかしこの場合イベントを抜けてもdt = dv.ToTable(); で参照されて
> いると思いますが、どうでしょうか。
> わたしは参照されているので、残っている気がします。

DataView.ToTable メソッドは新しいインスタンスを生成して返すので
dv の参照は残らないと思いますよ。

0
引用返信 編集キー/
■7679 / inTopicNo.6)  Re[3]: オブジェクトの破棄に関して
□投稿者/ くし&しも 二等兵(1回)-(2006/10/21(Sat) 21:52:42)

分類:[C#] 

No7456に返信(ダッチさんの記事)
> ■No7454に返信(たろうさんの記事)

ぽぴ王子さん、ダッチさん、たろうさん!まず返事が遅れてしまい申し訳ございません。
いろいろなご意見ありがとうございました。
参考にさせていただきます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -