當你調用節省NSManagedObjectContext
當有deletedObjects
要處理的,它的工作的一個很好的協議跟蹤的關係,以確定哪些相關對象也需要被刪除。這是每次保存(即使在父/子上下文情況下),如果我知道我將通過父上下文保存,我希望能夠在第一次之後跳過對每個上下文的檢查,但是我找不到這樣做的機制。
背景:
這裏的情況,我有3個上下文:
- C(B的子Context):後臺線程上下文做功A的
- B(子Context ):一個主線程上下文,用於我的讀取結果控制器,UI訪問
- A(子持久存儲):用於保存到磁盤的後臺線程上下文
我的對象圖是「Rich」,一些關係是針對具有100,000個項目的表。因此,刪除操作可以理解得很慢(級聯刪除會刪除一些刪除每個根對象的對象)。但是,當分析性能時,我意識到它實際上比所需要的要慢,在保存大部分CPU /時間用於解決圖形中的關係(試圖找出哪些相關對象也需要刪除)......並且它重複這個過程每次保存,即使我正在保存。
實施例保存過程:
- 上下文C已1刪除對象
- 保存上下文Ç - > B(約1工作的第二正在做跟蹤的關係)
- 上下文C現在保存(0刪除對象),上下文B具有原始刪除對象,並且還需要刪除30個新的相關對象(31個對象)
- 保存上下文B→A(約1秒的工作複查這些關係,這是我想跳過的工作)
- 上下文B已保存(0個已刪除的對象),上下文A具有與B必須刪除的相同的31個對象
- 保存上下文A - >持久存儲(在此處輕度工作,似乎此步驟不打擾重新檢查)
我試過了,並且調查了-[NSManagedObject validateForDeletion]
和-[NSManagedObjectContext processPendingChanges]
沒有運氣。有什麼想法嗎?
只是一個想法,可能是完全錯誤的。你有沒有嘗試清空你不想做任何工作的上下文,例如'reset'。當然,如果您不需要保存任何特定上下文已經產生的更改,那也只會是可以的。 –