Firestore toObject很慢

问题描述 投票:0回答:1

今天,我用大数据(其实不算大,总共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模式的截图(?). 它没有那么重。

screenshot

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

android firebase google-cloud-firestore
1个回答
3
投票

第一次调用toObject()方法时,我发现 toObject() 对于一个给定的类来说,它的速度总是很慢,而且它永远不会与自定义编写的代码相匹配。 这是因为它使用Java反射来发现类对象上的方法和属性的名称,从而可以将文档字段映射到它们中。 众所周知,反射是非常慢的. 如果你不想让速度变慢,你应该使用 getData() 的快照上获得一个 Map<String, Object> 的字段值,并手动将这些值映射到你的数据对象中。

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

© www.soinside.com 2019 - 2024. All rights reserved.