Обработайте емкость памяти - различные счетчики

Я думаю, что вы используете неправильную функцию случайного распределения. Вы, вероятно, не хотите равномерного распределения по номерам. Попробуйте обычное распределение вместо этого, чтобы критические попадания стали более необычными, чем «регулярные» хиты.

Я работаю с Java, поэтому я не уверен, где вы можете найти что-то для C ++, что дает вам случайные числа с нормальное распределение, но должно быть что-то там.

14
задан Danny Beckett 26 August 2014 в 23:19
поделиться

5 ответов

Если Вы хотите знать, насколько GC использует попытку:

GC.GetTotalMemory(true)

, Если Вы хотите знать то, что Ваш процесс использует из Windows (столбец VM Size в TaskManager) попытку:

Process.GetCurrentProcess().PrivateMemorySize64

, Если Вы хотите знать то, в противоположность чему Ваш процесс имеет в RAM (в файле подкачки) (Столбец Mem Usage в TaskManager) попытка:

Process.GetCurrentProcess().WorkingSet64

См. здесь для большего количества объяснения на различных видах памяти.

14
ответ дан 1 December 2019 в 10:05
поделиться

Я предложил бы также контролировать, как часто отсутствия страницы происходят. Отсутствие страницы происходит, когда Вы пытаетесь получить доступ к некоторым данным, которые были перемещены от физической памяти до файла подкачки, и система должна прочитать страницу от диска, прежде чем можно будет получить доступ к этим данным.

0
ответ дан 1 December 2019 в 10:05
поделиться

Рабочий набор не является хорошим свойством для использования. Из того, что я собираюсь, это включает все, чего процесс может коснуться, даже библиотеки, совместно использованные несколькими процессами, таким образом, Вы видите дважды считаемые байты в том счетчике. Частная память является намного лучшим в противоречии со взглядом на.

0
ответ дан 1 December 2019 в 10:05
поделиться

Если Вы хотите использовать "Память (Частный Рабочий набор)" как показано в диспетчере задач 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);
}
5
ответ дан 1 December 2019 в 10:05
поделиться

Хорошо, я нашел через Google ту же страницу, которую упомянул Lars, и я полагаю, что это - большое объяснение людей, которые не вполне знают, как память работает (как я).

http://shsc.info/WindowsMemoryManagement

Мое короткое заключение было:

  • Частные Байты = Память мой процесс запросил хранить данные. Часть его может быть разбита на страницы к диску или нет. Это - информация, которую я искал.

  • Виртуальные Байты = Частные Байты, плюс пространство, совместно использованное с другими процессами для загруженного DLLs, и т.д.

  • Рабочий набор = часть ВСЕЙ памяти моего процесса, который не был разбит на страницы к диску. Таким образом, сумма, разбитая на страницы к диску, должна быть (Виртуальная - Рабочий набор).

Спасибо все для Вашей справки!

6
ответ дан 1 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: