SciChart Android实时图形:如何最大化图形速度?

时间:2016-10-01 19:47:41

标签: android graph scichart

我正在使用Scichart for android编写实时图形应用程序。我一直在使用

FastLineRenderableSeries 作为我的数据系列的包装

但是我想知道 Android SciChart还有哪些其他技术才能最大限度地提高图形速度?

特别是当我使用 IXyDataSeries 并将x轴大小从10,000增加到100,000 pts时,我注意到性能下降。图表的速度一直很快,直到我向 IXyDataSeries 添加了大约90,000个点。

谢谢你们。我是stackoverflow的新手...更多的是mechE而不是CS人。

这是我的graphFragment类,它将UDP传感器数据作为字符串接收,拼接并将其添加到IXyDataSeries。

find

1 个答案:

答案 0 :(得分:4)

我看了你的代码,我不确定我们是否可以做些什么。你的例子包含6个XyDataSeries,XRange从0到100000,这在屏幕上提供了60万个点,这对于HTC One上的实时示例非常有用。在SciChart性能演示中,您只能看到3个XyDataSeries实例的使用,这些实例允许在每个系列中绘制更多的点

披露:我是SciChart Android团队的首席开发人员

但我认为你可以通过在代码中添加一些优化来获得额外的FPS。实时图表中的主要问题是更新图表的代码 - 它经常被调用,因此如果您在更新期间创建一些对象而不保存它,那么这可能会导致问题,因为Android中的GC(GC传递速度很慢而且它当GC收集所有未使用的对象时,可以暂停所有应用程序的线程)。所以我建议你做下一步:

  • 我建议在你的应用程序中增加heap size:更多的内存应用程序 - 如果你有效地使用内存,它会执行更少的GC。
  • 尝试减少装箱/拆箱的数量,并在频繁调用的代码中分配较少的对象(例如数据系列更新)。基本上你需要忘记在更新数据系列的回调中创建任何对象。在你的代码中,我注意到很少发生装箱/拆箱的地方。此代码每秒调用一次,并且某些方法在循环中调用,因此装箱/取消装箱的效果会显着影响应用程序的性能:

dataSeriesList.get(sensorSeriesNumber).append(xcounter, Double.parseDouble(num));

double xcounter = xCounters.get(sensorSeriesNumber);

xCounters.set(sensorSeriesNumber,xcounter);

我建议您使用接受IValues的append override。使用接受IValues的append可以避免在频繁附加大量数据时不必要的原始类型装箱/拆箱。

  • 我建议使用Float或Integer,除非你在创建XyDataSeries时真的需要Double。这可能会减少一半的内存消耗(8个字节来存储双倍,而4个字节来存储int / float),结果应用程序有更多的空闲内存,这样可以减少频繁执行GC。

希望这会对你有所帮助。