C#中EventLog枚举器的内存使用情况

时间:2014-11-03 15:40:09

标签: c# multithreading memory event-log

假设我有一个长时间运行的线程(守护程序或服务),我不想不必要地累积内存,我想使用EventLog。

我的代码类似于:

EventLog myEventLog = new EventLog;
myEventLog.Log = "Application";
IEnumerator eventEnumerator = myEventLog.Entries.GetEnumerator();
int eventLogIndex = 0;

然后我设置了一个方法,每隔一段时间从EventLog读取:

while(myEventLog.Entries.Count > eventLogIndex)
{
    eventEnumerator.MoveNext();
    eventLogIndex ++;
    // do something with eventEnumerator.Current)
}

因此,如果添加更多内容,枚举器会继续向上移动事件日志。我是这样做的,因为我读了here,如果事件同时进入,使用EventWritten处理程序会丢失事件。

我的问题是:这会导致内存使用量累积吗?是否会从内存中删除事件日志的使用值,或者在线程关闭之前整个事件列表是否会保留在内存中?并且,如果是这样,有没有办法解决传入的EventLogEntries的线程安全问题?

1 个答案:

答案 0 :(得分:1)

通过查看the code您可以验证,有内存使用累积。只要您持有对EventLog实例的引用,用法就会增长。

但是,累积的不是EventLogEntry类的实例,而是原始日志数据。因此,内存消耗将相对低。

您应该在现实生活中检查它,方法是模拟生产系统的典型行为并跟踪内存使用情况。