我应该从 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
作为一个建议,当 你 完成了。
是否应该对从 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
作为一个建议,当 你 完成了。