Когда я запускаю следующий код:Является ли System.Diagnostics.EventLog утечкой памяти?
static void Main(string[] args)
{
if (!System.Diagnostics.EventLog.SourceExists("eventSource"))
{
System.Diagnostics.EventLog.CreateEventSource("eventSource", "");
}
System.Diagnostics.EventLog eventLog = new System.Diagnostics.EventLog();
eventLog.Source = "eventSource";
eventLog.Log = "";
for (int i = 0; i < 10000; i++)
{
Thread.Sleep(100);
eventLog.WriteEntry("test", EventLogEntryType.Information);
//I also tried the static method, the program still leaks
//System.Diagnostics.EventLog.WriteEntry("eventSource", "test", EventLogEntryType.Information);
}
Console.ReadKey();
}
Использование памяти начинается около 1 МБ, но подниматься очень быстро и не останавливается. Зачем ?
ли вы уменьшаете свой цикл, чтобы увидеть, что произойдет, если ваша программа идет на ReadKey? – Sebastian
Тот факт, что использование памяти растет, не обязательно означает, что вы «утечка» памяти, просто потому, что вы используете ее много. Утечка памяти происходит, когда использование не возвращается после того, как вы закончили то, что делаете, и переместились дальше, без надлежащего удаления ваших объектов (http://madgeek.com/articles/leaks/leaks.en.html). Сказав это, вы должны утилизировать() свой EventLog после использования, а затем ждать некоторое (неопределенное количество) времени, пока GarbageCollector не выполнит свою задачу. – Arie
Фактически у меня есть эта утечка в службе windows, и утечка возникает только при использовании EventLog. Код выше - попытка воспроизвести утечку. @ Себастиан с 100 петлями, площадь памяти остается на высоком уровне. – gobes