Я думаю, что вы используете неправильную функцию случайного распределения. Вы, вероятно, не хотите равномерного распределения по номерам. Попробуйте обычное распределение вместо этого, чтобы критические попадания стали более необычными, чем «регулярные» хиты.
Я работаю с Java, поэтому я не уверен, где вы можете найти что-то для C ++, что дает вам случайные числа с нормальное распределение, но должно быть что-то там.
Если Вы хотите знать, насколько GC использует попытку:
GC.GetTotalMemory(true)
, Если Вы хотите знать то, что Ваш процесс использует из Windows (столбец VM Size в TaskManager) попытку:
Process.GetCurrentProcess().PrivateMemorySize64
, Если Вы хотите знать то, в противоположность чему Ваш процесс имеет в RAM (в файле подкачки) (Столбец Mem Usage в TaskManager) попытка:
Process.GetCurrentProcess().WorkingSet64
См. здесь для большего количества объяснения на различных видах памяти.
Я предложил бы также контролировать, как часто отсутствия страницы происходят. Отсутствие страницы происходит, когда Вы пытаетесь получить доступ к некоторым данным, которые были перемещены от физической памяти до файла подкачки, и система должна прочитать страницу от диска, прежде чем можно будет получить доступ к этим данным.
Рабочий набор не является хорошим свойством для использования. Из того, что я собираюсь, это включает все, чего процесс может коснуться, даже библиотеки, совместно использованные несколькими процессами, таким образом, Вы видите дважды считаемые байты в том счетчике. Частная память является намного лучшим в противоречии со взглядом на.
Если Вы хотите использовать "Память (Частный Рабочий набор)" как показано в диспетчере задач Windows Vista, который является эквивалентом Проводника Процесса "WS Частные Байты", вот код. Вероятно, лучше всего бросить этот бесконечный цикл в поток/фоновую задачу для статистики в реальном времени.
using System.Threading;
using System.Diagnostics;
//namespace...class...method
Process thisProc = Process.GetCurrentProcess();
PerformanceCounter PC = new PerformanceCounter();
PC.CategoryName = "Process";
PC.CounterName = "Working Set - Private";
PC.InstanceName = thisProc.ProcessName;
while (true)
{
String privMemory = (PC.NextValue()/1000).ToString()+"KB (Private Bytes)";
//Do something with string privMemory
Thread.Sleep(1000);
}
Хорошо, я нашел через Google ту же страницу, которую упомянул Lars, и я полагаю, что это - большое объяснение людей, которые не вполне знают, как память работает (как я).
http://shsc.info/WindowsMemoryManagement
Мое короткое заключение было:
Частные Байты = Память мой процесс запросил хранить данные. Часть его может быть разбита на страницы к диску или нет. Это - информация, которую я искал.
Виртуальные Байты = Частные Байты, плюс пространство, совместно использованное с другими процессами для загруженного DLLs, и т.д.
Рабочий набор = часть ВСЕЙ памяти моего процесса, который не был разбит на страницы к диску. Таким образом, сумма, разбитая на страницы к диску, должна быть (Виртуальная - Рабочий набор).
Спасибо все для Вашей справки!