我正在尝试使用 Restlet for Android 来查询 OData 数据源。但是,我对它在模拟器和真实设备上的性能印象不深。我在包装器AsyncTask
中提出了使 UI 响应的请求,但最终返回对象仍需要 1 分钟多的时间。
我在 LogCat 窗口中得到了很多:
10-04 18:20:41.667: DEBUG/dalvikvm(278): GC freed 7872 objects / 523928 bytes in 279ms
我能做些什么来加快查询速度?
查看 odata4j - http://odata4j.org 这是用于 java 的替代 odata 库,包括与 android 兼容的客户端 api。
我们刚刚在 0.3 版本中发布了一个简单的 android 客户端示例。此示例演示了一种解析/分页任意 odata 服务的有效方法。
除了服务驱动的分页(Alex 提到),我们使用高效的 xml pull 解析器实现来解析 odata 负载(我们发现堆活动/GC 是 android 上最大的性能瓶颈)。
我知道这对 RESTlet 库的性能没有帮助......但是:
要考虑的一件事是使用称为服务驱动分页的东西。请注意,这与 $top 和 $skip (也称为客户端驱动的分页)不同,因为即使客户端不要求,服务器也会分页。
当客户端对大型数据集执行未经过滤的查询时,SDP 特别有用。
这样,也许您可以将 7872 的数字降低到更易于管理的水平。