【发布时间】:2018-01-22 04:05:03
【问题描述】:
我目前正在用 UWP(Windows IoT Core)编写一个信息亭风格的应用程序,用于嵌入式设备(例如 pi3 等)。
该设备有多个传感器,它们在应用程序的单个屏幕中实时输出到各种图形/图表中,但我遇到了性能问题。传感器是在单独的线程中读取的(使用 Task.Run() => {}),但经过分析,这似乎根本不会花费太多 cpu 时间。 似乎更新图表需要太多时间,而且这并没有分布在核心上,因为只有一个 UI 线程。 CPU 使用率没有超过 25%,UI 响应速度变慢。
我尝试了一些优化(例如减少数据点的数量等),这有帮助,但还不够。也许那里有更快的图表组件(目前使用 Telerik uwp 组件),但我正在寻找另一种方法。
所以我的问题的总结:有没有办法让每个图表在单独的 UI 线程中呈现(因此在某种程度上分布在其他内核上)?
[稍后更新] 似乎新的 win IoT 版本更快一些,以及更新的图表组件。
【问题讨论】:
-
如果不了解您的应用程序是如何编写的,这很难说,但一种可能性可能是所有这些其他后台线程过于频繁地更新 UI?排队更新和按计划更新 UI 的可能性如何,比如每 0.1 或 0.5 秒?如果你的 UI 线程上发生了很多事情,你可能会遇到太多的上下文切换。
-
我已经尝试从不同的线程本身进行更新并使用您的方法。到目前为止,在使用上似乎没有太大的区别,同时调整了 Dispatcher.Runasync 优先级设置。我什至必须添加更多图表。
-
您的图表是每次都完全重绘,还是只重绘一部分?
-
嗯,每个循环的每个数据点都会发生变化,所以我刷新了整个绑定的数据上下文,是的。到目前为止真的找不到解决方法。
-
你能展示你的代码示例吗?
标签: c# multithreading uwp raspberry-pi3 windows-iot-core-10