[Windows]メモリエリア関係の用語まとめ(System.Diagnostics.Processクラス)

System.Diagnostics.Processにあるメモリ関係のプロパティを見ていたら、よく分からなくなってきたので、整理を兼ねてメモしておく。

メモリ


プロセスが使用しているメモリには、OSが管理するメモリ領域と、プログラムが使用するメモリ領域の2つがある。


OSが使用するメモリ領域


OSが使用するメモリ領域には、ページング化なエリアと、不可なエリアが存在する。

Process.NonpagedSystemMemorySize: ページングされないシステム メモリの量
Process.PagedSystemMemorySize   : ページング可能なシステム メモリの量



作成したプログラムのリソースリークを監視する際、このメモリはアプリから管理不可能な領域なので、
一般的には見なくて良い(はず)。



プログラムが使用するメモリ領域


プログラムが使用するメモリ領域はページング可能
プログラムが使用するメモリ領域は、プログラム側からは仮想アドレス空間として認識できる。

ページングの観点からメモリを見ると、仮想アドレスサイズ(Process.VirtualMemorySize)には以下の2つが存在する。

1.ページングファイル    (Process.PagedMemorySize)
2.物理メモリ




ワーキングセット


物理 RAM メモリ内でプロセスが現在参照できるメモリページのセットのこと。
ワーキングセットは物理メモリ上に存在していて、このデータを参照するときにページ フォルトを起こすことはない。
ワーキング セットのメモリは、使用されているメモリとは限らない(直前まで使用可能だったが、GCされて無い領域も含む)

ワーキングセット(Process.WorkingSet)は、以下の2つで構成される

1.共有データ
2.プライベート データ (Process.PrivateMemorySize)




共有データには、プログラムのコード等が含まれている
プライベートデータは、変数の値などの複数のプロセスで共有できない情報が入っている。


※ちなみに、VirtualMemorySize = PagedMemorySize + WorkingSetではないので注意。
(実測して確認した結果では、2つの和よりVirtualMemorySizeの方が大きかった)


プログラムが使用したメモリ領域の最大値


以下のメモリサイズのhighwatermark値はシステム側で監視しているので、それぞれ取得する事が可能。

Process.PagedMemorySize   の最大値  -> Process.PeakPagedMemorySize
Process.VirtualMemorySize の最大値  -> Process.PeakVirtualMemorySize
Process.WorkingSet        の最大値  -> Process.PeakWorkingSet

関連記事

コメントを残す

メールアドレスが公開されることはありません。