首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >分配游标时内存不足

分配游标时内存不足
EN

Stack Overflow用户
提问于 2012-09-25 14:36:04
回答 1查看 23.1K关注 0票数 18

我有一个记忆问题,我不能解决。我有一个类来完成我所有的数据库检索工作。我得到的错误如下:

android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=733 (# cursors opened by this proc=733)

执行以下操作时,出现内存分配错误:

mDatabaseInterface.getGraphForLevel(level);

我知道这是一个漏洞,因为我粗略地每2.5秒调用一次这个方法,并且第一次调用5到6次很容易完成。下面是我的DatabaseInterface类中的方法:

public Graph getGraphForLevel(Level level) {

    //get the nodes
    ArrayList<Node> nodes = new ArrayList<Node>(Arrays.asList(this.getNodesWithLevel(level)));
    //get the edges
    ArrayList<Edge> edges = new ArrayList<Edge>(Arrays.asList(this.getEdgesWithNodes(nodes)));

    return new Graph(nodes, edges);
}

public Node[] getNodesWithLevel(Level level) {

    List<Node> l = new ArrayList<Node>();

    Cursor cursor = mDatabase.query("nodes", null, 
            "level = " + wrapSql(String.valueOf(level.getId())), null, null, null, null);

    while (cursor.moveToNext()) {
        l.add(parseNodeFromCursor(cursor));
    }

    cursor.close();

    return l.toArray(new Node[l.size()]);       
}

private Node parseNodeFromCursor(Cursor cursor) {

    Level l = getLevelWithId(cursor.getInt(2));

    return new Node(cursor.getInt(0), cursor.getString(1), l, 
            cursor.getInt(4), cursor.getInt(5));
}

我有很多相互调用的方法,但我知道这不是一个递归问题,因为这个类可以在另一个应用程序中工作。我的主要问题是为什么cursor.close()不释放游标?如果我这样做:

cursor = mDatabase.query(...);
cursor.moveToNext();
Node node = new Node(cursor.getInt());
cursor.close();

在这种情况下光标是否会保留?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-25 17:20:18

cursor.close()的调用应该在finally块中,以防在迭代时抛出异常。

Cursor cursor = mDatabase.query("nodes", null, 
        "level = " + wrapSql(String.valueOf(level.getId())), null, null, null, null);
try {
    while (cursor.moveToNext()) {
        l.add(parseNodeFromCursor(cursor));
    }
} finally {
    cursor.close();
}
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12577400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档