Which approach is better to read Windows Event log in C#? WMI or EventLog

前端 未结 3 670
有刺的猬
有刺的猬 2021-01-02 00:56

I need to write an application to grab event log for System/Applications. The other requirement is that I need to read event log every minute or so to grab the new event log

3条回答
  •  醉酒成梦
    2021-01-02 01:30

    I know this is long after the original post, but I hope this is usefule to future searchers like myself who found the EventLog class too slow. Here is some code to demonstrate searching for the most recent System startup events:

    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"));
    

    If you only want the most recent entry, this code took 0.28 seconds on my machine, compared with 7.11 seconds using EventLog class in place of the for() loop:

    var entry = (from EventLogEntry e in ev.Entries
             where (e.InstanceId == 12)
             && e.TimeGenerated >= fromDate
             orderby e.TimeGenerated
             select e).LastOrDefault();
    

    Hope it helps.

提交回复
热议问题