2016-07-31 48 views
0

我有一個對象A,其中包含類型B的對象列表,其中包含類型爲C的對象列表。這是最深層次的層次結構。現在,當我做where()查詢時,我需要將所有這些數據作爲結果(意思是,包含對象B的對象A包含對象C)。 「問題」是我需要一個非託管對象的列表。所以我的問題是:如果我想獲取所有這些數據,當我提供maxDepth參數或者不提供copyFromRealm方法時,獲取速度有任何不同嗎?copyFromRealm方法中的maxDepth參數如何影響性能?

回答

2

當您設置maxDepth值時,Realm將提供null值超出給定的maxDepth級別。所以,如果你對null的值沒有問題,設置maxDepth會更快,因爲Realm設置爲null而不是實際值。如果您對null值不滿意,並將maxDepth設置爲根據您的代碼的最大可能深度,則它將具有相同的性能。

表現明智沒有區別;如果你使用copyFromRealm帶或不帶maxDepth參數,因爲如果你不提供maxDepth價值,境界將其設置爲Integer.MAX_VALUE並調用copyFromRealm方法像下面,

public <E extends RealmModel> List<E> copyFromRealm(Iterable<E> realmObjects) { 
    return copyFromRealm(realmObjects, Integer.MAX_VALUE); 
} 

因此,在這兩種情況下,你叫相同的功能。

TL; DR - 如果你的maxDepth是3(A-> B-> C),並設置maxDepth爲3,不存在性能差異,如果設置爲maxDepth然後0 < maxDepth < 3它是快,但你獲得超出maxDepthnull值。