当查询超过几千个结果时,Android 中的 Ormlite DAO 变得非常慢
当有几千个结果时,通过 Ormlite DAO 查询数据时遇到问题。
代码:
List<Point> pl = db.getPointsDAO().queryBuilder().where().
eq("route_id", croute).query();
当我想获取一个大的点列表List
对于当前路线 croute
我必须等待 40 秒才能获得 40.000 点。
其中 Point.class 是:
@DatabaseTable(tableName = "points")
public class Point extends BaseEntity {
@DatabaseField(generatedId = true)
private Integer point_id;
@DatabaseField(canBeNull = false)
...
@DatabaseField(canBeNull = false)
private Double dose;
@DatabaseField(dataType=DataType.DATE_STRING, format="yyyy-MM-dd HH:mm:ss")
public Date date;
@DatabaseField(canBeNull=true,foreign=true)
private Route route;
public Point() {
super();
};
... ...
}
和 Route.class 是:
@DatabaseTable(tableName = "routes")
public class Route extends BaseEntity {
@DatabaseField(generatedId = true)
private Integer route_id;
@DatabaseField(canBeNull = true)
private String name;
@ForeignCollectionField(eager = false)
ForeignCollection<Point> points;
public Route() {
super();
}
... ...
}
我做错了什么?
谢谢, 托尼
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
有几件事可以尝试@toni。
Date
存储为DATE_LONG
而不是字符串,这样可以节省 40k 字符串/日期转换。adb logcat
实用程序查看是否可以查看 GC 时间,以了解您是否只是在破坏收集器。任何可以降低内存使用量的方法都会有所帮助。查找如下行:route
字段上添加index = true
。Couple of things to try @toni.
Date
as aDATE_LONG
instead of a string which will save 40k string/date conversions.int
anddouble
primitives to lower your GC for each of your objects although I doubt it will make much of a difference.adb logcat
utility to see if you can see the GC times to see if you are just thrashing the collector. Anything that you can do to lower your memory usage will help then. Look for lines like:index = true
on the foreignroute
field.