2017-03-06 36 views
1

我已經將我的代碼拆分成許多小函數,這些小函數有時候意味着要在一個事務中一起執行。所以我創建了一個Realm並打開一個write塊,在這個塊內我調用了我所有的函數。爲每個操作創建Realm實例的開銷/問題?

到目前爲止,我一直在將Realm實例作爲參數傳遞給函數以便重用(對於類似realm.add的調用),但我不知道這是否真的有必要?無論在什麼地方需要創建Realm的新實例,它是否有缺點?我也想知道,如果這不是問題,如果這個新的Realm在一個由另一個Realm實例「啓動」的事務中被使用,這可能是一個問題。

最後,我也想知道是否有可能是用於抑制執行更新通知塊通知令牌的任何問題 - 對於這一點,具體的Realm比如我用,不要緊吧?

P.S.我只談論在同一個線程中使用Realm,我知道多線程的限制。

+0

你使用Realm的哪個平臺?我認爲斯威夫特,給你提到的塊? – AustinZ

+1

@AustinZ編輯!我選擇了realm-cocoa標籤,但由於某種原因StackOverflow忽略了它。 – Ixx

回答

3

有沒有在你的傳遞函數之間圍繞Realm情況下,如果你想構建你的代碼,這樣沒有壞處。還有沒有真正任何明顯的開銷在同一個線程中打開多個Realm情況下,因爲境界可可具有的優點是在同一個線程自動販賣出去的國度時,使用一個內部緩存。

我想對開放一個可能的論點Realm s反覆是,你必須使用try!,或包裹每次嘗試在do打開Realm - catch塊。在大多數情況下,不過,如果你已經打開了一個領域再次成功地創造更多Realm情況下不會導致文件相關的錯誤打開它(只要你有移動基礎數據庫文件不被濫用境界)。

你也應該不需要擔心不是由特定Realm例如販賣出去,或者使用其他Realm實例的寫入事務中的一個Realm實例通知令牌;如果你確實在使用同一個線程,那麼Realm在你描述的情況下應該可以正常工作。 (如果沒有,請file a bug反對我們!)

更一般地說,最好只在遇到性能問題時擔心優化問題,而且儀器已將某特定操作標識爲潛在瓶頸。就你而言,我認爲你可以更好地選擇適合你的個人喜好的解決方案。

+1

很好的答案,謝謝!我的疑惑被清除:) – Ixx