Android SQLite游标是否将查询的所有数据加载到内存中,还是某种优化策略是其实现的一部分?
Com*_*are 13
SQLiteCursor
当您浏览数据时,A会填充数据的"窗口".我的回忆是窗口大小是1MB,但我不能指出你备份回忆的特定代码.因此,对于小型查询,SQLiteCursor
一旦开始访问行和列,其结果就是将整个结果集保存在内存中.
hqt*_*hqt 13
感谢CommonsWare关于Window
术语,所以我通过导航这些课程再次颠倒了Android SQLiteCursor -> AbstractWindowedCursor -> CursorWindow
.这是CursorWindow
构造函数:
public CursorWindow(String name) {
mStartPos = 0;
mName = name != null && name.length() != 0 ? name : "<unnamed>";
if (sCursorWindowSize < 0) {
/** The cursor window size. resource xml file specifies the value in kB.
* convert it to bytes here by multiplying with 1024.
*/
sCursorWindowSize = Resources.getSystem().getInteger(
com.android.internal.R.integer.config_cursorWindowSize) * 1024;
}
mWindowPtr = nativeCreate(mName, sCursorWindowSize);
if (mWindowPtr == 0) {
throw new CursorWindowAllocationException("Cursor window allocation of " +
(sCursorWindowSize / 1024) + " kb failed. " + printStats());
}
mCloseGuard.open("close");
recordNewWindow(Binder.getCallingPid(), mWindowPtr);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,CommonsWare提到sCursorWindowSize
的大小是:
sCursorWindowSize = Resources.getSystem().getInteger(
com.android.internal.R.integer.config_cursorWindowSize) * 1024;
Run Code Online (Sandbox Code Playgroud)
我目前的版本是Android SDK 23.0.1
,值为com.android.internal.R.integer.config_cursorWindowSize
2048.这意味着2MB.我没有其他版本的SDK用于检查.
归档时间: |
|
查看次数: |
2305 次 |
最近记录: |