所以目前我有一個(gè)有 2 個(gè)進(jìn)程的應(yīng)用程序。一個(gè)進(jìn)程是 ping,而 ping 進(jìn)程是將結(jié)果寫入數(shù)組。另一個(gè)過(guò)程是使用計(jì)時(shí)器每秒更新 UI。更準(zhǔn)確地說(shuō),正在更新的是一個(gè)mschart。這就是我設(shè)置計(jì)時(shí)器的方式:readonly System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();myTimer.Interval = 1000;myTimer.Tick += WriteFunction;現(xiàn)在這是我每秒調(diào)用的方法以刷新 UI/實(shí)際圖形: private void WriteFunction(object objectInfo, EventArgs e) { foreach (NetPinger.source.AddGraph b in graphList) { b.fileRead(); } }更新圖表的方法在另一個(gè)類中,如下所示: 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)); } } }現(xiàn)在我注意到的是,如果 graphSizing(我循環(huán)通過(guò)的數(shù)字)保持在較低水平,則性能會(huì)很好,并且一切都是同步的(來(lái)自 UI 的多個(gè)圖形同時(shí)更新等),就像它應(yīng)該的那樣。但是,一旦我上升,讓我們說(shuō)喜歡 50 甚至 250(目標(biāo)應(yīng)該是什么),UI 和圖形更新就會(huì)非常非常緩慢。它只是每 3 秒更新一次,并且用戶界面通常非常滯后和緩慢。有沒有人有任何建議我如何保持良好的性能,或者我搞砸了 UI 太慢?如有更多問(wèn)題或更多詳細(xì)信息,請(qǐng)隨時(shí)提問(wèn)。
1 回答

嗶嗶one
TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
您的代碼始終在 UI 線程中運(yùn)行,因?yàn)?code>System.Windows.Forms.Timer在 UI 線程上調(diào)用委托。即使情況并非如此(并且您使用 System.Timer 代替),您也可以通過(guò) Invoke 調(diào)用將所有內(nèi)容委托回 UI。您需要確保首先在另一個(gè)線程上準(zhǔn)備數(shù)據(jù),并在 UI 線程本身中盡可能少做。
- 1 回答
- 0 關(guān)注
- 211 瀏覽
添加回答
舉報(bào)
0/150
提交
取消