文件格式基本上是[时间(双精度)、值(双精度)]。然而,时间轴上的条目不均匀。例如,在t = 0秒和t = 10秒之间可能没有任何点,但在t = 10秒和t = 11秒之间可能有100K个条目,依此类推。
例如,我们的测试数据集文件大小约为2.6 GB,共有324M个点。我们想向用户显示整个图表,并让她浏览图表。然而,将324M个点加载到ZedGraph上不仅不可能(我们在32位机器上),而且也没有必要在屏幕上有这么多点。
使用ZedGraph的FilteredPointList功能也似乎不可行,因为那需要先加载整个数据,然后对该数据进行过滤。
因此,除非我们缺失了什么,否则看起来我们唯一的解决方案就是 - 以某种方式 - 减少数据量,但是随着我们不断地努力,我们遇到了很多问题:
1- 如何减少不按照时间到达的数据?
2- 由于整个数据无法加载到内存中,任何算法都需要在磁盘上工作,因此需要仔细设计。
3- 如何处理缩放,特别是当数据在x轴上不均匀时。
如果数据是均匀的,在图表的初始加载时,我们可以按预定义的文件条目数量进行
Seek()
,并选择每个N个样本,并将其馈送给ZedGraph。但是,由于数据不均匀,我们必须更加聪明地选择要显示的样本,并且我们无法想出任何智能算法,它不必读取整个文件。很抱歉问题没有非常明确的具体性,但我希望我能够解释我们问题的性质和范围。
我们使用的是Windows 32位、.NET 4.0。