我应该从EventLogReader处理EventRecords吗?

时间:2016-12-07 18:39:15

标签: c# idisposable

应该调用从EventLogQuery的ReadEvent方法返回的事件吗?

        var eventLogQuery = new EventLogQuery("application", PathType.LogName) ;
        using (var logReader = new EventLogReader(eventLogQuery))
        {
            var eventInstance = logReader.ReadEvent();
            while (eventInstance != null)
            {
                eventInstance.Dispose();  //Should this be done?  Or is this not ours to dispose?
                eventInstance = logReader.ReadEvent();
            }
        }

我的代码是否应该在eventInstance上调用dispose?或者那是别的什么工作?

1 个答案:

答案 0 :(得分:2)

如果它实现IDispose,则在它离开创建它的范围之前将其丢弃 - 除非您计划因某些特定原因将其保留一段时间。除非MSDN另有说法,否则调用EventLogReader.ReadEvent()是你认为有资格成为创造的东西(我检查了 - 它没有)。

"除非你计划将它保留一段时间"这就是为什么logReader应该非常不愿意处理它为你创造的物品:它只是不知道你打算用它们做什么,所以它应该由你决定。如果有疑问,检查MSDN并不是一个坏主意,但如果EventLogReader.Dispose()处理了查询结果也会很奇怪。如果您查看EventLogRecord in MSDN,它对该主题没有任何说明,那么只需IDispose作为建议在你时完成了它。