ClrMD


.NETプロファイラとか使えばよい気がするが、.NETアプリのメモリ使用量確認

Install-Package Microsoft.Diagnostics.Runtime -Pre

自プロセスはアタッチ出来ない、動作プロセスに影響をあたえる可能性があるのであくまでも確認用

int pid = Process.GetProcessesByName("プロセス名")[0].Id;
using (DataTarget dataTarget = DataTarget.AttachToProcess(pid, 5000))
{
  string dacLocation = dataTarget.ClrVersions[0].TryGetDacLocation();
  ClrRuntime runtime = dataTarget.CreateRuntime(dacLocation);

  ClrHeap heap = runtime.GetHeap();

  Dictionary<string, ulong> nameSize = new Dictionary<string, ulong>();
  foreach (ulong obj in heap.EnumerateObjects())
  {
    ClrType type = heap.GetObjectType(obj);
    ulong size = type.GetSize(obj);
    if (!nameSize.ContainsKey(type.Name))
      nameSize.Add(type.Name, size);
    else
      nameSize[type.Name] += size;
  }
  foreach (var item in nameSize)
  {
    var size = item.Value;
    var typeName = item.Key;
    Console.WriteLine("{0,8:n0} {1}", size, typeName);
  }
}
カテゴリー: 開発 タグ: パーマリンク