Я знаю, что это намного позже оригинального поста, но я надеюсь, что это будет полезно для будущих искателей, таких как я, которые считают класс EventLog слишком медленным.Вот некоторый код для демонстрации поиска самых последних событий запуска системы:
EventLog ev = new EventLog()
{
Log = "System"
};
SystemSession sess;
DateTime t1 = DateTime.Now;
DateTime t2 = DateTime.Now;
DateTime fromDate = DateTime.Now.AddDays(-30);
TimeSpan t;
int i, j=0;
t1 = DateTime.Now;
for (i = ev.Entries.Count - 1; i >= 0; i--)
{
if (ev.Entries[i].TimeGenerated < fromDate) break;
if (ev.Entries[i].InstanceId == 12)
{
//do something ...
break;
}
}
t2 = DateTime.Now;
t = new TimeSpan(t2.Ticks - t1.Ticks);
string duration = String.Format("After {0} iterations, elapsed time = {2}",
ev.Entries.Count - i,
t.ToString("c"));
Если вам нужна только самая последняя запись, этот код занял 0,28 секунды на моем компьютере по сравнению с 7,11 секундами с использованием класса EventLog вместо цикла for ():
var entry = (from EventLogEntry e in ev.Entries
where (e.InstanceId == 12)
&& e.TimeGenerated >= fromDate
orderby e.TimeGenerated
select e).LastOrDefault();
Надеюсь, это поможет.