所以目前我有一個有 2 個進程的應用程序。一個進程是 ping,而 ping 進程是將結果寫入數組。另一個過程是使用計時器每秒更新 UI。更準確地說,正在更新的是一個mschart。這就是我設置計時器的方式:readonly System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();myTimer.Interval = 1000;myTimer.Tick += WriteFunction;現在這是我每秒調用的方法以刷新 UI/實際圖形: private void WriteFunction(object objectInfo, EventArgs e) { foreach (NetPinger.source.AddGraph b in graphList) { b.fileRead(); } }更新圖表的方法在另一個類中,如下所示: public void fileRead() { double unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; chart_holder.Series[0].Points.Clear(); for (double i = unixTimestamp; unixTimestamp - graphSizing < i; i--) { bool exists; try { exists = Array.Exists(file, element => element.XValue == i); exists = true; } catch { exists = false; } try { if (exists == false) { DataPoint point = new DataPoint(i, 0); chart_holder.Series[0].Points.Add(point); } else { DataPoint point = Array.Find(file, element => element.XValue == i); chart_holder.Series[0].Points.Add(point); } } catch(Exception ex) { MessageBox.Show(Convert.ToString(ex)); } } }現在我注意到的是,如果 graphSizing(我循環通過的數字)保持在較低水平,則性能會很好,并且一切都是同步的(來自 UI 的多個圖形同時更新等),就像它應該的那樣。但是,一旦我上升,讓我們說喜歡 50 甚至 250(目標應該是什么),UI 和圖形更新就會非常非常緩慢。它只是每 3 秒更新一次,并且用戶界面通常非常滯后和緩慢。有沒有人有任何建議我如何保持良好的性能,或者我搞砸了 UI 太慢?如有更多問題或更多詳細信息,請隨時提問。
1 回答

嗶嗶one
TA貢獻1854條經驗 獲得超8個贊
您的代碼始終在 UI 線程中運行,因為System.Windows.Forms.Timer
在 UI 線程上調用委托。即使情況并非如此(并且您使用 System.Timer 代替),您也可以通過 Invoke 調用將所有內容委托回 UI。您需要確保首先在另一個線程上準備數據,并在 UI 線程本身中盡可能少做。
- 1 回答
- 0 關注
- 209 瀏覽
添加回答
舉報
0/150
提交
取消