2017-09-13 39 views
0

我目前正在爲UWP(windows IoT核心)編寫一個kiosk風格的應用程序,以用於嵌入式設備(例如pi3等)。頁面的多個UI線程(加速緩慢的個別控件)

該設備有幾個傳感器,這些傳感器在應用程序的單個屏幕上實時輸出到各種圖形/圖表中,但我遇到了性能問題。傳感器正在單獨的線程中讀取(使用Task.Run()=> {}),但經過分析,這似乎並不花費太多的CPU時間。 似乎更新圖形花費了太多時間,並且這不是分佈在內核上,因爲只有一個UI線程。 CPU使用率不會超過25%,UI響應速度會變慢。

我嘗試了幾次優化(例如減少數據點的數量等),這有所幫助,但這還不夠。也許有更快的圖表組件(目前使用Telerik uwp組件),但我正在尋找另一種方法。

所以我的問題總結:有沒有什麼辦法讓圖表分別在不同的UI線程中呈現(並因此分佈在其他內核中)?

[稍後更新] 看起來像新的勝利物聯網發佈有點快,以及更新的圖表組件。

+0

這很難,沒有看到你的應用程序是如何寫的說,但一個可能性是,該UI是所有這些其他後臺線程經常更新?那麼排隊更新的可能性以及是否按照計劃的基礎更新UI,比如每個.1或.5秒?如果你的UI線程有很多事情發生,你可能會遭受太多的上下文切換。 – cost

+0

我試着從不同的線程本身進行更新並使用您的方法。到目前爲止,在使用Dispatcher.Runasync優先級設置方面似乎沒有多大區別。而且我還必須添加更多圖表。 – user2921878

+0

您的圖表是否每次都完全重新繪製,或者只是其中的一小部分? – cost

回答

0

不能嚴格講UWP,但從我的WPF有多個UI線程的經驗是一個麻煩,你應該儘可能避免(不要說他們介紹的限制)。

在處理您的傳感器數據時,您在查看什麼樣的投票率?許多傳感器的數據速率遠遠超過向用戶顯示的有用數據速率,您的工作線程是否可以在較大的時間範圍內計算平均值並用它填充圖形?我懷疑你的用戶會看到每秒更新20次以上的好處。

+0

傳感器輪詢只有每200-500毫秒。即使採用更快的輪詢速度,傳感器本身也幾乎不佔用CPU時間。它的4+圖表每500毫秒重新繪製UI線程上的所有CPU時間。我可以放慢速度,但是離經驗還有點距離。還有更多圖表來臨。如果我可以在其他CPU核心上塗抹這些內核,而這些內核目前什麼都不做,這會有所幫助。 – user2921878

+0

您對圖表使用什麼樣的控件?你能夠發佈你更新底層數據的任何代碼嗎? –

+0

Im使用此Telerik圖表控件。 http://docs.telerik.com/windows-universal/controls/radchart/getting-started。基本上它是一個具有25個新傳感器值的數組,使用Dispatcher.RunAsync從後臺線程每隔500ms分配給DataContext屬性(如該頁面的示例中)。相當標準。 – user2921878