Results 1 to 1 of 1

Thread: [2.0] Efficiency check!

  1. #1

    Thread Starter
    Member
    Join Date
    Apr 2006
    Posts
    56

    [2.0] Efficiency check!

    Objective:

    Get the last line or 2 of a log file that's anywhere between 1kb and 600kb on average.

    The initial parse function:

    Code:
            public void ParseLogFile(string fullLogPath)
            {
                string[] logLines = File.ReadAllLines(fullLogPath, Encoding.UTF7);
    
                int lastLineIndex = logLines.GetUpperBound(0);
    
                if (logLines[lastLineIndex - 1].IndexOf("±â") > 0) ParseHeader(logLines[lastLineIndex - 1].Substring(logLines[lastLineIndex - 1].LastIndexOf(": ") + 2));
                if (logLines[lastLineIndex].IndexOf("¹ø") > 0) ParseBody(logLines[lastLineIndex].Substring(logLines[lastLineIndex].LastIndexOf(": ") + 2));
                if (logLines[lastLineIndex].IndexOf("ÅÏ :") > 0) ParseFooter(logLines[lastLineIndex].Substring(logLines[lastLineIndex].LastIndexOf(": ") + 2));
            }
    Seperate functions that handle parsing a specific line:

    Code:
            private void ParseHeader(string logLine)
            {   
                string[] headerInfoArray;
                string startAtSection = string.Empty;
                string[] splitter = { " " };
    
                startAtSection = logLine.Substring(logLine.LastIndexOf(":") + 1);
    
                headerInfoArray = startAtSection.Split(splitter, StringSplitOptions.None);
    
                Header.Title = headerInfoArray[0];
                Header.Tags = headerInfoArray[1];
            }
    The others are similiar to the one posted above. Don't need to post it.

    ParseLogFile() gets called everytime the filesystemwatcher event triggers, which is usually every 5-15 seconds.

    Is there any way I could make this better?

    Edit:

    Might as well throw this question in here too rather than make a new post. At the moment in that filesystemwatcher event I am using Thread.Sleep(200) before I parse the file because without it I kept randomly getting a "file is in use by another process, you can't read this file" error.

    Also without the sleep thrown in there the log file was actually getting corrupted occasionally. Once in a while it would skip a few lines that should have been logged.

    Is there a more proper way of telling my program to wait until the file has been closed by the log owner's app before I read it?
    Last edited by ThisIsMyUserName; Nov 10th, 2006 at 02:30 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width