Wow!  The same code that requires 1.2 seconds on my machine requires 43
seconds on your machine?  Are you running an x86 emulator on a 68030? :-)

I added the BeginUpdate & EndUpdate calls and the average time to load
(without referencing the Message property on EventLogEntry) is about 1
second.

I then thought that it might be related to my code originally being called
from the Load event of the form, so I changed it to be called from
button.click handler and the times changed slightly:

Without BeginUpdate/EndUpdate:  1.4 seconds
With BeginUpdate/EndUpdate:             1 second

Very odd.  I'd love to know what the discrepancy is between our machines...

Seang

-----Original Message-----
From: Walt Ritscher [mailto:[EMAIL PROTECTED]]
Sent: Friday, May 31, 2002 2:04 PM
To: [EMAIL PROTECTED]
Subject: Re: [DOTNET] Eventlog Viewer


The Listview control adds some overhead to the process also.

Make a call to Listview1.BeginUpdate before adding items.  Then call
Listview1.EndUpdate after you are done.

I tested Sean's  code on our network. Before adding the BeginUpdate call
the code tested at 43 seconds (local machine).  After adding the calls
to BegingUpdate and EndUpdate the time dropped to 3.2 seconds.

Walt Ritscher

-----Original Message-----
From: dotnet discussion [mailto:[EMAIL PROTECTED]] On Behalf Of
Sean Greer (SBI-Chico)
Sent: Friday, May 31, 2002 12:30 PM
To: [EMAIL PROTECTED]
Subject: Re: [DOTNET] Eventlog Viewer


I made some changes to the code that you posted and running against a
remote workstation with 1100 entries it takes 1.2 seconds to populate
the listview (100 Mbps, dual 1.2 GHz Athlon).  If I fetch the Message
property, the time goes up to ~ 5 seconds.

One of the things that I notice is that you're calling ToString() on
properties that are already strings and on enums that should be compared
against their native types.  The cost of the method call is not zero, so
skip calling ToString on the Source property.  Also, I would defer
fetching the Message until the user selects the event.  This would mean
keeping the log open (which I'm not doing).

Anyway, hope it helps...

Seang

Here is the reworked code:

private void LoadEventLog()
{
        try
        {
                DateTime dtStart = DateTime.Now;
                using(EventLog log = new EventLog("Application",
"david"))
                {
                        // let's get these as strings one time only
                        string sError =
EventLogEntryType.Error.ToString();
                        string sWarn =
EventLogEntryType.Warning.ToString();
                        string sFailureAudit =
EventLogEntryType.FailureAudit.ToString();
                        string sInfo =
EventLogEntryType.Information.ToString();
                        string sSuccessAudit =
EventLogEntryType.SuccessAudit.ToString();

                        StringBuilder sb = new StringBuilder(128);

                        int nCount = log.Entries.Count;
                        for(int i = 0; i < nCount; i++)
                        {
                                EventLogEntry ele = log.Entries[i];
                                switch(ele.EntryType)
                                {
                                        case EventLogEntryType.Error:
                                                sb.Append(sError);
                                                break;
                                        case EventLogEntryType.Warning:
                                                sb.Append(sWarn);
                                                break;
                                        case
EventLogEntryType.FailureAudit:

sb.Append(sFailureAudit);
                                                break;
                                        case
EventLogEntryType.Information:
                                                sb.Append(sInfo);
                                                break;
                                        case
EventLogEntryType.SuccessAudit:

sb.Append(sSuccessAudit);
                                                break;
                                }

                                sb.AppendFormat("  {0}  {1}   {2}
({3})
{4}   {5}   {6}",

ele.TimeWritten.ToShortDateString(),


ele.TimeWritten.ToShortTimeString(),

                                        ele.Source, ele.CategoryNumber,
ele.EventID,
                                        ele.UserName, ele.MachineName);

                                ListViewItem lvi = new ListViewItem();
                                lvi.Text = sb.ToString();
                                lvi.Tag = i;
                                m_List.Items.Add(lvi);

                                sb.Length = 0;
                        }
                        TimeSpan ts = DateTime.Now - dtStart;
                        MessageBox.Show(this, string.Format("Time to
dump {0} events = {1} ms.",
                                log.Entries.Count,
ts.TotalMilliseconds));

                        log.Close();
                }
        }
        catch(Exception ex)
        {
                Debug.Assert(false, ex.ToString());
        }
}

You can read messages from the DOTNET archive, unsubscribe from DOTNET,
or subscribe to other DevelopMentor lists at http://discuss.develop.com.

You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to