我有一个例程,它每秒多次对 SQLite 数据库运行不同的查询。过了一段时间,我就会得到错误
"android.database.CursorWindowAllocationException: - Cursor window allocation of 2048 kb failed. # Open Cursors = "
出现在 LogCat 中。
我有应用程序记录内存使用情况,实际上,当使用达到某个限制时,我得到这个错误,暗示它用完了。我的直觉告诉我,数据库引擎正在创建一个新的缓冲区(CursorWindow) ,每次我运行一个查询,即使。Close ()游标,垃圾收集器和 SQLiteDatabase.releaseMemory()
释放内存的速度都不够快。我认为解决方案可能在于“强制”数据库总是写入同一个缓冲区,而不是创建新的缓冲区,但我一直无法找到这样做的方法。我尝试实例化我自己的 CursorWindow,并尝试将 SQLiteCursor 设置为它,但是没有用。
¿Any ideas?
编辑: 重新示例来自@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
每次我得到新的数据。