0
나는 다음과 같은 코드를 실행하면 :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();
}
메모리 사용 1MB의 주위에 시작하지만, 매우 빠르게 일어나 중지하지 않습니다. 왜 ?
당신은 당신의 프로그램이 간다하면 어떻게됩니까 확인하기 위해 루프를 감소 했 readkey? – Sebastian
메모리 사용량이 증가하고 있다는 사실이 꼭 많은 메모리를 사용하고 있다는 것을 의미하지는 않습니다. 메모리 누출은 객체를 올바르게 처리하지 않고 작업을 끝내고 사용을 마치면 사용량이 다시 떨어지지 않을 때 발생합니다 (http://madgeek.com/articles/leaks/leaks.en.html). 그런 말로하면 GarbageCollector가 그 일을 할 때까지 사용 후 EventLog를 Dispose() 한 다음 시간의 일부 (지정되지 않은 금액)를 기다려야합니다. – Arie
실제로 Windows 서비스에서이 누수가 있고 누출은 EventLog를 사용할 때만 발생합니다. 위의 코드는 누출을 재현하려는 시도입니다. @Sebastian 100 루프를 사용하면 메모리 사용 공간이 높은 수준으로 유지됩니다. – gobes