我应该从 EventLogReader 处理 EventRecords 吗?

Should I dispose EventRecords from a EventLogReader?

是否应该对从 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 吗?或者这是其他人的工作?

如果它实现了 IDispose,请在它离开创建它的范围之前将其处理掉——除非您出于某种特殊原因打算将其保留一段时间。调用 EventLogReader.ReadEvent() 是您应该假定符合创建条件的事情,除非 MSDN 另有说明(我检查过 - 它没有)。

"Unless you plan to keep it around for a while" 就是为什么 logReader 应该非常不愿意处理它为你创建的对象:它只是不知道你打算用它们做什么,所以它应该离开由你决定。如果有疑问,检查 MSDN 是个不错的主意,但如果 EventLogReader.Dispose() 也处理查询结果,那就奇怪了。如果你看 EventLogRecord in MSDN,它没有说任何关于这个主题的东西,所以只是把 IDispose 作为一个建议,当 完成了。