我有一个例程,每秒对SQLite数据库运行多次不同的查询。过一会儿我会得到错误
"android.database.CursorWindowAllocationException: - Cursor window allocation of 2048 kb failed. # Open Cursors = "
出现在LogCat中。
我有应用日志内存的使用情况,确实,当使用情况达到一定限制时,我会收到此错误,暗示它用完了。我的直觉告诉我,每次运行查询时,数据库引擎都会创建一个NEW缓冲区(CursorWindow),即使我将游标标记为.close(),垃圾回收器和SQLiteDatabase.releaseMemory()
释放内存的速度够快。我认为解决方案可能在于“强制”数据库始终写入同一缓冲区,而不创建新缓冲区,但是我一直无法找到一种方法来做到这一点。我尝试实例化自己的CursorWindow,并尝试将其设置为和SQLiteCursor无济于事。
有任何想法吗?
编辑:从@GrahamBorland重新示例代码请求:
public static CursorWindow cursorWindow = new CursorWindow("cursorWindow");
public static SQLiteCursor sqlCursor;
public static void getItemsVisibleArea(GeoPoint mapCenter, int latSpan, int lonSpan) {
query = "SELECT * FROM Items"; //would be more complex in real code
sqlCursor = (SQLiteCursor)db.rawQuery(query, null);
sqlCursor.setWindow(cursorWindow);
}
理想情况下,我希望能够.setWindow()
在发出新查询之前将数据放入CursorWindow
每次新数据的位置。