我正在使用PolyLineSegment和points在Silverlight中构建折线图控件。它的工作方式与预期的一样,但是当需要可视化的数据太多(太多点)时,应用程序会冻结很长时间。由于一个明显的原因,我不能在单独的线程上移动我的代码 - 它直接处理UI元素,所以当我尝试从单独的线程调用它时,它会导致异常(即使UI元素尚未呈现)。 / p>
有没有办法在后台线程上动态创建UI元素,然后将它们传递给要呈现的UI线程?如果没有,那么可能的解决方案是什么?我正在考虑创建一个Bitmap图像而不是实际的控件,但在这种情况下不会有太多的交互性。
答案 0 :(得分:2)
听起来你需要更快速地渲染你的积分。如果您只有800k样本而且只有800像素显示它们,那么如果您只是将其加载到PolyLineSegment
,那么每个像素的计算会浪费1000个点。
我会重新'插值'点(这对于你的大型数据集来说真的是合并的)。您需要确保正确捕获每个像素中函数的动态范围:
如果您的点/像素接近1,您将需要切换到简单渲染以提供更好的视觉效果。
答案 1 :(得分:2)
为了显示具有“数百万点”的波形(在您的情况下为PCM音频数据),您最好直接写入WritableBitmap。然后,您只有一个渲染对象。
您已经说过计算中没有太多处理。尝试使用单独的UIElements是一个太大的开销(恕我直言)。点显示对于位图来说是微不足道的,并且有很多线绘制算法,针对速度进行了优化,可以进行任何线段。
您可以在背景线程上绘制点,并在处理结束时更新图像的ImageSource以显示它。
答案 2 :(得分:0)