[英]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.