private void VirtualMemoryStatistics()
{
var sizeByType = new Dictionary <MEM, ulong>();
var sizeByState = new Dictionary <MEM, ulong>();
ulong largestFreeRegionSize = 0;
using (var target = _context.CreateTemporaryDbgEngTarget())
{
foreach (var region in target.EnumerateVMRegions())
{
if (region.Type != 0)
{
if (!sizeByType.ContainsKey(region.Type))
{
sizeByType.Add(region.Type, 0);
}
sizeByType[region.Type] += region.RegionSize;
}
if (!sizeByState.ContainsKey(region.State))
{
sizeByState.Add(region.State, 0);
}
sizeByState[region.State] += region.RegionSize;
if (region.State == MEM.FREE)
{
largestFreeRegionSize = Math.Max(largestFreeRegionSize, region.RegionSize);
}
}
}
_context.WriteLine("Virtual memory statistics:");
_context.WriteLine();
foreach (var kvp in sizeByType)
{
_context.WriteLine("{0,-10} {1,-16}", kvp.Key, kvp.Value.ToMemoryUnits());
}
_context.WriteLine();
foreach (var kvp in sizeByState)
{
_context.WriteLine("{0,-10} {1,-16}", kvp.Key, kvp.Value.ToMemoryUnits());
}
_context.WriteLine();
_context.WriteLine("Largest free region size: {0}", largestFreeRegionSize.ToMemoryUnits());
_context.WriteLine();
}