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

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

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

Re[6]: VC#2008でメモリ開放されない


(過去ログ 58 を表示中)

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

■33473 / inTopicNo.1)  VC#2008でメモリ開放されない
  
□投稿者/ maru3 (1回)-(2009/03/01(Sun) 16:06:11)

分類:[C#] 

私がC#を用いてプログラミングすると、タスクマネージャでのメモリ使用量がどんどん増えていってしまいます。
いつ増えているのかを調べるために、テストコードを書いてみました。
これでどうしてメモリ使用量が増え続けてしまうのか教えていただけませんか?

public Form1()
{
    InitializeComponent();
    label1.Text = "0";
    timer1.Interval = 1000;
    timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
    int a = int.Parse(label1.Text);
    a++;
    label1.Text = a.ToString();
    label2.Text = GC.GetTotalMemory(false).ToString();
}
2秒に1回、8KBずつ増えていってしまい、いつまでたっても開放されません。何か強制的に開放するコードを書かなければ
いけないのでしょうか?

引用返信 編集キー/
■33475 / inTopicNo.2)  Re[1]: VC#2008でメモリ開放されない
□投稿者/ 中 博俊 (23回)-(2009/03/01(Sun) 18:53:09)
こんにちは。なかです。

とりあえず一通りガベージコレクションについての資料を見た後という前提でよろしい?




引用返信 編集キー/
■33476 / inTopicNo.3)  Re[2]: VC#2008でメモリ開放されない
□投稿者/ maru3 (2回)-(2009/03/01(Sun) 19:31:57)
なかさん、返信ありがとうございます。

> とりあえず一通りガベージコレクションについての資料を見た後という前提でよろしい?
ガベージについては知っています。ただ、.Net Frameworkのガベージがどういった物なのかは
よく知らないです。

最初はタスクマネージャのメモリ使用量を見ていたのですが、ググったところ、タスクマネージャのそれは
アテにならないからGC.GetTotalMemoryにしろ。との記述を見てそれを追加してみました。
タスクマネージャもGC.GetTotalMemoryも変化量に差はありません。ずっと増えて行きます。
引用返信 編集キー/
■33478 / inTopicNo.4)  Re[3]: VC#2008でメモリ開放されない
□投稿者/ 倉田 有大 (466回)-(2009/03/01(Sun) 23:04:43)
No33476 (maru3 さん) に返信
> なかさん、返信ありがとうございます。
>
>>とりあえず一通りガベージコレクションについての資料を見た後という前提でよろしい?
> ガベージについては知っています。ただ、.Net Frameworkのガベージがどういった物なのかは
> よく知らないです。
>
> 最初はタスクマネージャのメモリ使用量を見ていたのですが、ググったところ、タスクマネージャのそれは
> アテにならないからGC.GetTotalMemoryにしろ。との記述を見てそれを追加してみました。
> タスクマネージャもGC.GetTotalMemoryも変化量に差はありません。ずっと増えて行きます。

そら、500MBぐらいくっても、解放してくれないことがありますから。
基本的にimageクラスとか明示的にDisposeしたほうがいいクラス以外は、そのままほっとけばいつかは解放してくれます。
強制解放はGC.Collct();だっけ?使ったこと無いな〜
C#使ったら一度は気になる道w
引用返信 編集キー/
■33481 / inTopicNo.5)  Re[4]: VC#2008でメモリ開放されない
□投稿者/ maru3 (3回)-(2009/03/02(Mon) 07:31:02)
倉田さんへ

なるほど、500MBもいってしまう場合もあるわけですね。
もう少し様子をみてみます。ありがとうございました。
引用返信 編集キー/
■33484 / inTopicNo.6)  Re[5]: VC#2008でメモリ開放されない
□投稿者/ なちゃ (253回)-(2009/03/02(Mon) 09:48:12)
すぐに解放できるような小さな一時オブジェクトばかりの処理なら、
おそらくは数MB程度で解放されると思います。
まあこの数字にこだわっても意味ないですが。
もちろん保証などありません。
現状のGC動作の特徴によるたまたまの動作です。
※ひょっとしたらそうはならないかも、あしからず

引用返信 編集キー/
■33488 / inTopicNo.7)  Re[6]: VC#2008でメモリ開放されない
□投稿者/ 囚人 (325回)-(2009/03/02(Mon) 10:38:40)
timer1.Interval = 1;

ぐらいで試してみたら、使用量が一定までいくと一気に減るのがすぐに分かると思いますよ。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -