提问者:小点点

Firestore到Object速度慢


今天,我用大数据(实际上不是很大,总共有2000条记录)测试我的应用程序,并注意到toObject()方法执行得很慢。

基本上,我从firestore获得一个记录列表,处理它以在UI中显示,并将其传递给recyclerView。 为了验证,我删除了所有的处理逻辑,只保留toobject()。 这是一个瓶颈,总共需要大约9秒。

下面是我的代码:

public ArrayList<MyModel> doProcessing(Context context, QuerySnapshot snapshots) {
    ArrayList<MyModel> listToReturn = new ArrayList<>();

    for (DocumentSnapshot snap : snapshots.getDocuments()) {
        MyModel myModel = snap.toObject(MyModel.class);

        ...
        ...   // my processing logic
        ...   // check the data and set other fields of myModel based on it 
        ...

        listToReturn.add(myModel);
    }

    return listToReturn;
}

下面是MyModel模式(?!)的屏幕截图。 没那么重。

如何解决这个问题? 有人遇到同样的问题吗?


共1个答案

匿名用户

对给定类的toObject()的第一次调用总是很慢,而且它永远不会与自定义编写的代码匹配。 这是因为它使用Java反射来发现类对象上的方法和属性的名称,以便它可以将文档字段映射到它们中。 众所周知,反射是非常缓慢的。 如果您不希望速度太慢,则应该在快照上使用getData()来获取字段值的映射,并手动将这些值映射到数据对象中。

基本上,你必须决定你是想要方便还是想要性能。

相关问题