我有一个例程,每秒多次对SQLite数据库运行不同的查询。过了一段时间,我就会得到这个错误
"android.database.CursorWindowAllocationException: - Cursor window allocation of 2048 kb failed. # Open Cursors = "
出现在LogCat中。
我有应用程序的内存使用日志,实际上,当使用达到一定的限制时,我会得到这个错误,这意味着它用完了。我的直觉告诉我,每次我运行查询时,数据库引擎都会创建一个新的缓冲区(CursorWindow),即使.close()游标,垃圾收集器和SQLiteDatabase.releaseMemory()
在释放内存方面都不够快。我认为解决方案可能在于“强制”数据库总是写入相同的缓冲区,而不是创建新的缓冲区,但我一直无法找到这样做的方法。我曾尝试实例化我自己的CursorWindow,并尝试将SQLiteCursor设置为它,但都无济于事。
有什么想法吗?
编辑:来自@GrahamBorland的re示例代码请求:
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
中。
https://stackoverflow.com/questions/11340257
复制相似问题