为每个操作创建Realm实例的开销/问题?

时间:2017-03-06 21:17:35

标签: ios swift realm realm-mobile-platform

我已将代码拆分为许多小函数,这些小函数有时意味着在事务中一起执行。所以我创建一个Realm并打开一个write块,在这个块中我调用了所有函数。

到目前为止,我一直将Realm实例作为参数传递给函数以便重用(对于像realm.add这样的调用),但我想知道这是否真的有必要?在任何需要的地方简单地创建Realm的新实例是否有任何缺点?我也想知道,如果这不是一个问题,如果这个新领域被用于"由"另一个Realm实例,如果这可能是个问题。

最后,我还想知道用于禁止执行更新通知块的通知令牌是否存在任何问题 - 为此,我使用的特定Realm实例并不重要,对?

P.S。我只谈论在同一个帖子中使用Realm,我意识到多线程限制。

1 个答案:

答案 0 :(得分:4)

如果要以这种方式构建代码,在函数之间传递Realm个实例是没有害处的。在同一个线程上打开多个Realm实例也没有任何可观的开销,因为Realm Cocoa有一个内部缓存,它在同一个线程上清除Realms时使用。

我认为反复打开Realm的一个可能的论点是,您必须使用try!,或者在每个Realm do中打开catch。 {1}}阻止。但是,在大多数情况下,如果您通过创建更多Realm个实例来打开Realm并再次成功打开它,则不会导致与文件相关的错误(只要您没有通过移动底层数据库文件而滥用Realm)

您也不必担心没有被特定Realm实例淘汰的通知令牌,或者在另一个Realm实例的写入事务中使用一个Realm实例;如果您确实在同一个线程上工作,Realm应该在您描述的情况下正常工作。 (如果没有,请file a bug反对我们!)

更一般地说,只有在遇到性能问题并且仪器已将特定操作确定为潜在的性能瓶颈时,最好还是担心优化。在您的情况下,我认为您可以选择更适合您个人偏好的解决方案。