高密度的Silverlight图表控件

10

我一直在研究Silverlight图表控件,以显示大量的样本数据(五个不同系列中的大约10,000个数据点 - 总共约50,000个点)。

我发现Dundas、Visifire、Microsoft等现有选项在显示超过几百个数据点时性能非常差。

我认为现有图表控件的性能问题是由于过度使用矢量图形引起的。因此,一个解决方案是使用WritableBitmap类生成光栅图的客户端图表控件。

在我深入进行轮子重复发明之前,有没有人找到第三方或OSS控件,可以管理大量的样本数据点来创建迷你图


你好,请看一下SciChart,它能够在性能演示(每秒3,000,000个数据点)上呈现多个系列共计100,000个数据点,帧率为30FPS。这是一个新的产品,将在2012年第一季度初准备上线。虽然它没有LOB图表具有的所有功能,但支持多种图表类型、基本光标、缩放、平移和轴缩放,并且具有非常高的性能。http://www.abtsoftware.co.uk/News/tabid/93/articleType/ArticleView/articleId/16/SciChart_Technology_Preview_-_Fast_WPFSilverlight_Stock_Chart_Performance_Demo.aspx - Dr. Andrew Burnett-Thompson
8个回答

7
请看 Visiblox Charts(http://www.visiblox.com/)。 我正在开发一个遥测应用程序,使用同一Silverlight组件中的三个图表来绘制大约36,000个点,并且在性能方面几乎没有任何减速。

他们在网站上有一个高性能示例 - http://www.visiblox.com/examples/LargeDataSets。我选择使用Visiblox是在查看以下博客文章后:

新的性能比较:http://www.visifire.com/blog/2011/12/02/fast-silverlight-charts/

旧的性能比较:http://www.scottlogic.co.uk/blog/colin/2010/12/visiblox-visifire-dynamicdatadisplay-charting-performance-comparison/

我的遥测示例现在是我创建的CodeProject文章的一部分,如果您想查看!


3

根据这里的建议,我刚刚试用了Visiblox和Infragistics。

Visiblox具有良好的开发者体验、清晰的API和无浮肿。虽然性能对于少量数据点来说还可以,但是当你进入10万范围时,性能就会崩溃。这里是具有几千个点的Visiblox示例(您可以下载示例并仅调整数据点数量)。

现在,这里的共同论点是,你不应该向图表绑定太多数据,而应该事先进行一些修剪。我同意这一点,但理想情况下,我想要一个图表控件来为我解决这个问题。正确地实现缩放、平移等功能是非常困难的任务,我很乐意花费几百美元来获得这些功能。在这里,这是普通的经济常识,不要重复造轮子。

Infragistics确实做到了这一点。我可以绑定一百万个数据点并获得流畅的性能。这里是Infragistics示例

但是,Infragistics会安装很多无用的东西(一个本地的IIS Web应用程序,其中包含一些也可以在线查看的示例),除了(优秀的)示例和代码级文档之外,我还缺少对每个组件及其单独模块的高级介绍。

由于许多人在SO上推荐 Telerik 控件,因为它们具有清晰的API、文档和开发支持,所以我也看了一下他们的图表控件。然而,我必须承认,我觉得它相当慢(缩放大约需要500-1000毫秒,这太长了,感觉不流畅)。这里是Telerik示例


我目前正在研究[mindscapehq][http://www.mindscapehq.com/demo/silverlightelements/demopage.html#/ChartOverviewPage]图表。与Infragistics相比,即使绘制非等距x值(真正的x,y图形),它也能实现良好的性能。 - Johannes Rudolph

2

1

在你自己开始玩转WritableBitmap之前,不妨先看看René Schulte的WriteableBitmapEx,他在这里博客中介绍了它。真是太棒了。


很好的建议!我已经使用WritableBitmapEx尝试编写了一个小游戏,但是还没有开始处理任何图表方面的内容。 这是一个相当不错的库。谢谢Anthony。 - ptg

1

我不知道任何开源软件或第三方控件能够满足您的需求。

在我曾需要处理十万个以上数据点的情况下,我们通过保持简单实现了相应功能。最大的性能杀手是每个数据点内的元素数量。通过将元素保持为简单的椭圆形,并使用静态画刷填充,应用程序反应迅速。


你好,最终你使用了哪个组件能够渲染10万个点? - Dr. Andrew Burnett-Thompson

1

0

我相信你正在寻找的Telerik示例可以在这里找到。它展示了大量数据,你实际上可以放大/缩小。他们还有一个服务器负载"性能"演示。这是一个带有数百个数据点的散点图的例子。


-1

是的,Telerik组件自那时以来已经更新。我已经更新了链接。 - Henrik Söderlund

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接