【发布时间】:2011-08-19 01:01:40
【问题描述】:
我正在使用 PolyLineSegment 和点在 Silverlight 中构建折线图控件。它按预期工作,但是当需要可视化的数据太多(点太多)时,应用程序会冻结很长时间。出于明显的原因,我无法在单独的线程上移动我的代码 - 它直接处理 UI 元素,因此当我尝试从单独的线程调用它们时会导致异常(即使 UI 元素尚未呈现)。
有没有办法在后台线程上动态创建 UI 元素,然后将它们传递给 UI 线程进行渲染?如果没有,可能的解决方案是什么?我正在考虑创建一个位图图像而不是实际控件,但在这种情况下不会有太多交互性。
【问题讨论】:
-
什么时间最长?是元素的实际渲染,还是在创建每个元素之前执行一堆计算?如果是后者,您可能可以在后台线程上运行这些计算,然后通过
Dispatcher编组每个元素的创建。 -
我的代码中没有太多的计算,而是大量的数据。我说的是百万分。缩小它们并不是最好的选择。
-
这使它变得更加困难。但是,如果您有数百万个点,它们如何同时显示在屏幕上?即使在 1024x768 下也有
-
这是 PCM 音频数据的图表,它基本上显示了一个波形。用于确定每个点的 {X, Y} 位置的算法依赖于相邻值。我试图缩小数组并应用插值,但视觉结果不是很准确。至于渲染时间,PolyLineSegment 好像是把所有的点都翻译成一张位图,所以没花那么多时间。
-
根据我的经验,实际上是
PolyLineSegment的渲染需要花费所有时间。创建 100k 点很快;渲染它们很慢。
标签: c# multithreading silverlight charts