簡體   English   中英

渴望加載比使用NHibernate的延遲加載慢

[英]Eager loading is slower than lazy loading with NHibernate

我有這樣一個對象結構: Box有很多Item有很多Ingredient 當我調用某個方法時,必須填充所有集合以執行該任務。 我認為在這種情況下熱切地加載集合會更好,但是在我的測試中,它可以更快地加載它們。 一個Box有大約200個Item ,而這個Item大約有400個Ingredient

當必須填充所有集合時,為什么NHibernate(3.3)的熱切加載速度較慢?

有幾個變量可以通過改變不同的獲取模式的工作方式來影響性能。 如果您一次性連接獲取所有內容,請考慮返回的行數將為nBoxes * nItemsPerBox * nIngredientsPerItem。

你的意思是單個項目有400種成分嗎? 如果是這樣,對於單個框,將是1 * 200 * 400 = 80000行。 在此,盒子信息將重復80000次,每個項目將重復400次。 要轉移的大量數據。

如果在NHibernate中打開SQL日志記錄,涉及的實際查詢是什么?

你真的確定,每個盒子都可以訪問items屬性,而對於每個項目,訪問成分屬性?
否則,您不會使用延遲加載檢索相同數量的數據。

因為它必須從表和子表加載所有行。 不幸的是,Hibernate並不總是以最聰明的方式做到這一點。 您可以使用自定義查詢來更有效地加載數據。 但是你必須問這個問題,你真的想要所有這些行嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM