tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: パフォーマンス劣化
投稿日: 2004/06/10(Thu) 04:03
投稿者たくボン
補足です。

ガベージコレクタは、ヒープが満杯(ジェネレーションが0になる場合)になると起動しますが、VBでい
うグローバル変数,Static変数,ヒープ上の強い参照,CPUレジスタなどは不要なメモリを検索する際のル
ートとなるので、回収の対象になりません。CEでの開発経験はないのですが、極端にメモリが制限され
ている状況ならば、
・変数の配置位置を考える
・関数を細分化して、個々の関数内で完結するコードを書く(同一メソッド内で複数のIOを行わない。
もしくは明示的にファイナライゼーションを行う等々)
が効果的かもしれません。分割が不可能ならばC#などのusingステートメントを利用する方法もありま
す。

おそらく複数のファイルをIOするので、ヒープが満杯になる状況が連続して発生しているのだと思いま
す。ガベージ対象のルートとなる上記のオブジェクトを検討してみることでいくらか効果が期待できる
と思います。

特にFinalizeを実装しているクラスでは、そのオブジェクトが参照している他のオブジェクトも延命さ
れてしまうので注意が必要です。このような場合は、長い処理を行う関数内であるのならDisposeメソッ
ドを使用して不要になった変数は明示的にDisposeしてあげることが重要です。

このあたりのガベージコレクタの挙動は、「プログラミング .NET Framework(ISBN4-89100-303-0)」等
の書籍でわかりやすく説明されているので一度目を通してみるのも良いかと思います。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。