Ios Firebase实时数据库占用CPU/内存,并带有过多的;“用户写入”;

Ios Firebase实时数据库占用CPU/内存,并带有过多的;“用户写入”;,ios,firebase,firebase-realtime-database,Ios,Firebase,Firebase Realtime Database,我在iOS项目上使用Firebase实时数据库。我收到越来越多的用户关于我的应用程序消耗大量电池的报告,最近我做了一些分析。在我的设备上,该应用程序一次使用100%的CPU和超过0.5 Gb的内存(并且在不断增长),持续数分钟——时间档案器表明它的Firebase是罪魁祸首,在[FRepo restoreWrites]方法中花费的10.09分钟中,有超过8.77分钟的时间(在[fcomboundwrite addWrite:atPath:中为3.22分钟)。这是启用了持久性的情况 我深入研究了r

我在iOS项目上使用Firebase实时数据库。我收到越来越多的用户关于我的应用程序消耗大量电池的报告,最近我做了一些分析。在我的设备上,该应用程序一次使用100%的CPU和超过0.5 Gb的内存(并且在不断增长),持续数分钟——时间档案器表明它的Firebase是罪魁祸首,在
[FRepo restoreWrites]
方法中花费的10.09分钟中,有超过8.77分钟的时间(在
[fcomboundwrite addWrite:atPath:
中为3.22分钟)。这是启用了持久性的情况

我深入研究了
restoreWrites
的代码,它的性能似乎与
userWrites
记录的数量有关<代码>[reference repo]persistenceManager]storageEngine]WriteDB]allKeys]count]的数据约为75000(并且每次启动应用程序时都在增长)-这是不是有多少写入已持久化到磁盘,但尚未写入服务器?或者这是所有用户的记录总数?我不知道。但无论哪种方式,它都在不断增长,并导致大量性能问题

这是不可避免的,也是迁移到FireStore的原因吗?或者这是我正在做的可以修复的错误

以下是完整的个人资料信息,向您展示我所说的内容:

9.41 min   93.2%    0 s      _dispatch_workloop_worker_thread$VARIANT$mp  0x109890
9.41 min   93.2%    0 s       _pthread_wqthread
9.41 min   93.2%    0 s        _dispatch_workloop_worker_thread$VARIANT$mp
9.41 min   93.2%    0 s         _dispatch_root_queue_drain_deferred_wlh$VARIANT$mp
9.41 min   93.2%    0 s          _dispatch_queue_invoke$VARIANT$mp
9.37 min   92.9%    0 s           _dispatch_queue_serial_drain$VARIANT$mp
9.37 min   92.9%    0 s            _dispatch_client_callout
9.37 min   92.9%    0 s             _dispatch_call_block_and_release
8.78 min   87.0%    0 s              -[FRepo deferredInit]
8.77 min   87.0%    0 s               -[FRepo restoreWrites]
7.30 min   72.3%    0 s                -[__NSArrayM enumerateObjectsWithOptions:usingBlock:]
6.55 min   64.9%    1.00 ms                 __22-[FRepo restoreWrites]_block_invoke
5.69 min   56.3%    4.00 ms                  -[FSyncTree applyUserMergeAtPath:changedChildren:writeId:]
5.67 min   56.2%    8.00 ms                   -[FWriteTree addMergeAtPath:changedChildren:writeId:]
5.63 min   55.8%    5.00 ms                    -[FCompoundWrite addCompoundWrite:atPath:]
5.63 min   55.8%    0 s                     -[FImmutableTree forEach:]
5.63 min   55.8%    1.00 ms                      -[FImmutableTree forEachPathSoFar:withBlock:]
3.43 min   34.0%    1.00 ms                       -[FArraySortedDictionary enumerateKeysAndObjectsReverse:usingBlock:]
3.42 min   33.9%    3.00 ms                        __45-[FImmutableTree forEachPathSoFar:withBlock:]_block_invoke
3.32 min   32.9%    7.00 ms                         -[FImmutableTree forEachPathSoFar:withBlock:]
3.31 min   32.8%    6.00 ms                          __42-[FCompoundWrite addCompoundWrite:atPath:]_block_invoke
3.22 min   31.9%    9.00 ms                           -[FCompoundWrite addWrite:atPath:]

大约有多少数据要保存到磁盘?另外:有多少个挂起的写入(即在没有网络连接时发生的本地写入)?当应用程序重新启动时,客户端需要处理这两个问题。有关此主题的详细讨论,请参阅(尽管我不确定提供的解决方案)。@FrankvanPuffelen在iOS上有没有一种简单的方法可以找出待处理写入的数量?我认为在任何平台上都没有公共API可以获得这样的数量。很抱歉。@FrankvanPuffelen对于这两个问题的相同答案,FireStore的性能会更好吗?还有,我是否可以使用“私有”API来提供见解?e、 正如我所说,我做了[reference repo]persistenceManager]storageEngine]WriteDB]allKeys]计数,结果是75000+并且还在增长