- 1. 概要
- 2. Collect
- 3. GetTotalMemory
1. 概要
「System.GC」は、参考サイトによれば
未使用メモリを自動的に収集するサービスであるシステム ガベージ コレクターを制御します。
とのことです。
本ページは、下記のサイトを参考にさせていただきました。
「GC クラス (System) 」
2. Collect
参考サイトによれば、「強制的にガベージ コレクションを行います。」とのことです。
わたしは、
GC.Collect();
という、引数なしのものしか、使用したことがありません。
とにかく、その時点で、解放可能なメモリは、解放してくれるらしい。
下手を打つと、結構時間がかかってしまう処理です。
3. GetTotalMemory
わたしは、プログラムがやたらメモリを消費しているとき、どのタイミングで消費しているのかを調べるためのログを出力するのにつかっています。
参考サイトには。
断片化を除くヒープ サイズを取得します。 たとえば、GC ヒープ の合計サイズが 100 mb で、断片化 (空きオブジェクトによって占有される領域) が 40 mb を占める場合、この API は 60 mb を報告します。 パラメーターは、このメソッドが制御を戻す前に短い時間だけ待機して、システムがガベージ コレクションを行い、オブジェクトの終了操作を実行できるようにするかどうかを示します。
と書いてあります。
つまり、ガベージコレクトを行わないと、実際にメモリ消費している値と異なる値が返ってくるわけですが。
パラメータによって、ガベージコレクトを行えば、実際に消費している値になるわけです。
これ、思わぬ副作用で、これを使用すると同時に、ガベージコレクトもできちゃうってことになるのです。
public static long GetTotalMemory (bool forceFullCollection);
引数で、「true」を指定すると、ガベージコレクトを行ってから戻ります。
戻り値は、断片化を除くヒープ サイズ (バイト単位)になります。
|
|