我一直在研究Silverlight图表控件,以显示大量的样本数据(五个不同系列中的大约10,000个数据点 - 总共约50,000个点)。
我发现Dundas、Visifire、Microsoft等现有选项在显示超过几百个数据点时性能非常差。
我认为现有图表控件的性能问题是由于过度使用矢量图形引起的。因此,一个解决方案是使用WritableBitmap类生成光栅图的客户端图表控件。
在我深入进行轮子重复发明之前,有没有人找到第三方或OSS控件,可以管理大量的样本数据点来创建迷你图?
我一直在研究Silverlight图表控件,以显示大量的样本数据(五个不同系列中的大约10,000个数据点 - 总共约50,000个点)。
我发现Dundas、Visifire、Microsoft等现有选项在显示超过几百个数据点时性能非常差。
我认为现有图表控件的性能问题是由于过度使用矢量图形引起的。因此,一个解决方案是使用WritableBitmap类生成光栅图的客户端图表控件。
在我深入进行轮子重复发明之前,有没有人找到第三方或OSS控件,可以管理大量的样本数据点来创建迷你图?
他们在网站上有一个高性能示例 - http://www.visiblox.com/examples/LargeDataSets。我选择使用Visiblox是在查看以下博客文章后:
新的性能比较:http://www.visifire.com/blog/2011/12/02/fast-silverlight-charts/
我的遥测示例现在是我创建的CodeProject文章的一部分,如果您想查看!
根据这里的建议,我刚刚试用了Visiblox和Infragistics。
Visiblox具有良好的开发者体验、清晰的API和无浮肿。虽然性能对于少量数据点来说还可以,但是当你进入10万范围时,性能就会崩溃。这里是具有几千个点的Visiblox示例(您可以下载示例并仅调整数据点数量)。
现在,这里的共同论点是,你不应该向图表绑定太多数据,而应该事先进行一些修剪。我同意这一点,但理想情况下,我想要一个图表控件来为我解决这个问题。正确地实现缩放、平移等功能是非常困难的任务,我很乐意花费几百美元来获得这些功能。在这里,这是普通的经济常识,不要重复造轮子。
Infragistics确实做到了这一点。我可以绑定一百万个数据点并获得流畅的性能。这里是Infragistics示例。
但是,Infragistics会安装很多无用的东西(一个本地的IIS Web应用程序,其中包含一些也可以在线查看的示例),除了(优秀的)示例和代码级文档之外,我还缺少对每个组件及其单独模块的高级介绍。
由于许多人在SO上推荐 Telerik 控件,因为它们具有清晰的API、文档和开发支持,所以我也看了一下他们的图表控件。然而,我必须承认,我觉得它相当慢(缩放大约需要500-1000毫秒,这太长了,感觉不流畅)。这里是Telerik示例。
在你自己开始玩转WritableBitmap之前,不妨先看看René Schulte的WriteableBitmapEx
,他在这里博客中介绍了它。真是太棒了。
我不知道任何开源软件或第三方控件能够满足您的需求。
在我曾需要处理十万个以上数据点的情况下,我们通过保持简单实现了相应功能。最大的性能杀手是每个数据点内的元素数量。通过将元素保持为简单的椭圆形,并使用静态画刷填充,应用程序反应迅速。
我也应该提一下我自己没有用过图表控件,所以我不能保证它们的质量。但是这些演示看起来不错。
编辑:
上面的链接已经失效了。这里是Telerik图表控件最新版本的链接,现在称为ChartView:
http://demos.telerik.com/silverlight/#ChartView/FirstLook