Мой код:RAM проблемы PerformanceCounter
var list = new LinkedList<int>();
var ramCounter = new PerformanceCounter("Memory", "Available MBytes");
while (true)
{
for(int i = 0; i < 1000 * 1000; i++) list.AddLast(0);
Console.WriteLine(ramCounter.NextValue());
}
Вопросы:
- документация, кажется, сказать, что я могу использовать PerformanceCounter только как Administrator, но я побежал мое заявление как Standard Пользователь и он сработал. Могу ли я на это положиться?
- Я постоянно получаю OutOfMemoryException когда около 200 МБ ОЗУ остаются, почему? Это невозможно из-за фрагментации, потому что я выделяю int за раз. Кроме того, это не может быть из-за проблем с адресацией, так как я уже превысил 2 ГБ (исключение получает, когда из моего 3 ГБ извлекается 2.8). Номера, выводимые тестовым приложением, были проверены с помощью окна «Диспетчер задач», расположенного сбоку.
- Как только я получил BSOD, когда тестовое приложение было запущено и осталось около 400 МБ. Какие-нибудь намеки на то, что может это сделать? Я проведу проверку целостности ОЗУ, что-нибудь еще? Должен ли я быть осторожным с вызовом
PerformanceCounter.NextValue()
в цикле или что-то в этом роде? Обратите внимание: это первый раз, когда я получаю BSOD на этом ПК. - В некоторых случаях при выполнении программы я получаю большие задержки. Например. когда я начинаю с 1 ГБ свободной оперативной памяти, когда я добираюсь до 700 МБ, приложение замораживается в течение 1 секунды, а затем примерно в 400 МБ замерзает около 4 секунд. Почему это? Потому что ОС необходимо поменять местами кэширование диска, чтобы освободить память или что-то еще?
Примечание: Почему я это делаю? Ну, я хочу, чтобы мое приложение, интенсивно использующее память, обнаруживало, когда осталось 5 МБ ОЗУ, и предупреждайте пользователя о том, что «Память низкая, пожалуйста, закройте другие программы и вернитесь, или эта программа не удастся».
Если у вас нет ссылки на резервные копии утверждений о том, что они не могут быть проблемами фрагментации или адресности, вы не должны исключать их. – Amok
Зачем ты создал эту вики? –
Amuck: ну, независимо от того, насколько сильно фрагментирована память, всегда найдется место для одного int (или пара, в котором учитываются служебные данные LinkedList). Также я не вижу, как это может быть связано с адресацией, учитывая, что моя 32-битная Windows может адресовать память до 4 ГБ, и я работаю ниже трех. –