假设我有一个长时间运行的线程(守护程序或服务),我不想不必要地累积内存,我想使用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的线程安全问题?
答案 0 :(得分:1)
通过查看the code您可以验证是,有内存使用累积。只要您持有对EventLog实例的引用,用法就会增长。
但是,累积的不是EventLogEntry类的实例,而是原始日志数据。因此,内存消耗将相对低。
您应该在现实生活中检查它,方法是模拟生产系统的典型行为并跟踪内存使用情况。