1
我知道這個answer,它解釋了什麼設置lazy =「extra」。nHibernate集合lazy =「extra」 - 爲什麼我們不使用它?
我的問題是,是否有使用lazy =「extra」的相關費用?爲什麼我們不會只爲每個實例設置lazy =「extra」,否則我們會將其設置爲「true」?它看起來與「真實」一樣,但更好?
我知道這個answer,它解釋了什麼設置lazy =「extra」。nHibernate集合lazy =「extra」 - 爲什麼我們不使用它?
我的問題是,是否有使用lazy =「extra」的相關費用?爲什麼我們不會只爲每個實例設置lazy =「extra」,否則我們會將其設置爲「true」?它看起來與「真實」一樣,但更好?
我能想到的唯一情況是,如果一個集合主要用作數據源或循環迭代,那麼首次訪問任何屬性(甚至是Count
)時獲取完整集合會更好。
否則,您可能會最終執行更多查詢而不是必要的。
例如
bool found = false;
int pos = 0;
while (!found && pos < Collection.Count)
{
if (MyFunction(Collection[pos]))
{
found = true;
}
pos++;
}
是的,這是有道理的,所以當你有一個肯定會一個電話.Count中後使用的集合,然後你會設置爲lazy =「真」之前保存的計數的SQL查詢使用它。 我仍然認爲這樣做的成本遠低於潛在成本。所以不是默認的做法是總是設置lazy =「extra」,並且只有在你知道你會需要該集合的情況下,爲這些情況設置lazy =「true」? – syclee 2012-03-22 01:02:22
我想說它將取決於集合的大小。如果它很大,我認爲值得使用lazy = extra,因爲與構建整個集合相比,count操作的代價是微不足道的。還沒有找到NH引用,但Hibernate文檔說,循環中的每個項目訪問都會生成一個查詢(根據需要加載項目) – 2012-03-22 12:37:20