簡體   English   中英

C#-如何優化SystemFileWatcher

[英]C# - How to Optimize SystemFileWatcher

我有一個SystemFileWatcher,它允許用戶查看實時日志文件。 這些日志文件中的一些可能會變得很大,有時會通過VPN讀取它們,從而進一步減慢了速度。 有沒有一種方法可以優化我的變更事件? 我已經得到它,以便它可以工作並顯示信息,並且不重復或不顯示過去的事件,但是我在表單上的按鈕也處於鎖定狀態。 所以我的第一個問題是如何進一步優化代碼? 我的第二個問題是我如何仍與表單交互?

private void fileWatcher_Changed(object sender, FileSystemEventArgs e)
    {
        fileWatcher.EnableRaisingEvents = false;
        var fs = new FileStream(GlobalVar.GlobalString, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
        using (var sr = new StreamReader(fs))
        {
            var s = "";
            int copyGood = 0;
            bool result = false;
            bool copyModeOn = false;
            var newDateTime = new DateTime();
            List<string> list = new List<string>();
            if (GlobalVar.GlobalLineCount > 0)
            {
                for (var i = 0; i < GlobalVar.GlobalLineCount; i++)
                {
                    sr.ReadLine();
                }
                while ((s = sr.ReadLine()) != null)
                {
                    list.Add(s);
                }
            }
            else
            {
                while ((s = sr.ReadLine()) != null)
                {
                    list.Add(s);
                }
            }
            GlobalVar.GlobalLineCount = list.Count();
            list.Reverse();
            var list2 = list.Take(50).Reverse().ToList();

              foreach (string s1 in list2)
              {
                    if (s1.Length > 23)
                    {
                        var lineTime = s1.Substring(0, 23);
                        result = DateTime.TryParse(lineTime, out newDateTime);
                    }
                    if (newDateTime != null && result)
                    {
                        DateTime lineTime = Convert.ToDateTime(newDateTime.ToString(@"HH:mm:ss.fff"));
                        DateTime dt = Convert.ToDateTime(GlobalVar.GlobalDateTimeString);
                        DateTime globalTimeSet = Convert.ToDateTime(dt.ToString(@"HH:mm:ss.fff"));
                        copyGood = DateTime.Compare(globalTimeSet, lineTime);
                    }
                    if (result && copyGood < 0)
                    {
                        if (richTextBox1.Lines.Length > 0)
                        {
                            foreach (string line in richTextBox1.Lines)
                            {
                                if (line == s1)
                                {
                                    copyModeOn = false;
                                    break;
                                }
                                copyModeOn = true;
                            }
                        }
                        else
                        {
                            copyModeOn = true;
                        }
                        if (copyModeOn)
                        {
                            richTextBox1.AppendText(Environment.NewLine + s1 );
                            richTextBox1.Focus();
                            richTextBox1.Select(richTextBox1.TextLength, 0);
                            richTextBox1.ScrollToCaret();
                        }
                    }
                }
        }
        fileWatcher.EnableRaisingEvents = true;
    }`

您能提供的任何幫助將不勝感激!

並不是的。 最大的好處是它們之間沒有遠程網絡連接-這意味着將大部分處理轉移到應用程序服務器,並僅通過網絡發送所需的線路。

您要做的是不讀取整個文件。 顯然,日志文件條目的大小是有限的。 無需從頭開始一遍又一遍;)您可以假定每行的最大大小(例如512字節),僅此一項就可以減少大型文件的大量讀取。 或者,您實際上可以記住上一次讀取的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM