2013-09-17 3 views
0

Я хочу знать, когда Windows 7 обнаруживает, что моя программа использует слишком много памяти. Поэтому я хочу справиться с этим. Как я могу подписаться на это событие (до того, как приложение будет закрыто).Как подписаться на события диагностики истощения ресурсов?

Некоторая информация из Windows, журналы:

Windows, успешно диагностируется низкое состояние виртуальной памяти. Следующие программы потребляли большую часть виртуальной памяти. КОД события: 2004 Ключевые слова: События, связанные с исчерпанием предела фиксации системы (виртуальная память).

Detecting Low Virtual Memory Conditions in Windows

+0

Это не так, как это работает, это не обязательно ваша программа, которая вызывает состояние. Вы просто оказались на вершине списка свиней, которые несут свою несправедливую долю. Вы не можете его перехватить, условие обнаруживается в режиме ядра. Купите больше ОЗУ, чтобы файл подкачки стал больше, перестань быть копией. –

+0

Как вы думаете, достаточно 32 ГБ оперативной памяти для ноутбука? Или я должен разобрать и добавить еще 4 слота для 64 ГБ оперативной памяти? ;) Кстати, я решил проблему. Это событие очень легко подписать и обработать. – user809808

ответ

1
System.Diagnostics.EventLog eventLog = new System.Diagnostics.EventLog("System", ".", "Resource-Exhaustion-Detector"); 
eventLog.EnableRaisingEvents = true; 
eventLog.EntryWritten += eventLog_EntryWritten; 

static void eventLog_EntryWritten(object sender, System.Diagnostics.EntryWrittenEventArgs e) 
{ 
    if (e.Entry.Message.Contains(Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName))) 
    { 
     Logger.Error("Our application consumed too much memory `{0}`. So we stopping work right now to prevent reboot OS.", new object[] {e.Entry.Message},MethodBase.GetCurrentMethod()); 
     GC.Collect(); 
     //do smth     
    } 
} 
Смежные вопросы