当有几千个结果时,通过Ormlite DAO查询数据时出现问题。
代码:
List<Point> pl = db.getPointsDAO().queryBuilder().where().
eq("route_id", croute).query();
当我想获得当前路线List<Point> pl
的大量分数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();
}
... ...
}
一些想法我做错了什么?
谢谢, 托尼
答案 0 :(得分:2)
要尝试@toni的事情。
Date
存储为DATE_LONG
而不是字符串,这样可以节省40k字符串/日期转换次数。int
和double
原语降低每个对象的GC,但我怀疑它会产生很大的不同。adb logcat
实用程序查看您是否可以查看GC时间,看看您是否只是在掠夺收集器。您可以采取任何措施来降低内存使用量。查找以下行:GC_EXPLICIT freed 4140 objects / 216560 bytes in 114ms
index = true
字段中添加route
。