2011-05-18 93 views
1

我剛剛實現了SysCache2併爲我的解決方案中的一些實體激活了緩存。 一切工作正常,但我確實有一個問題:NHibernate Profiler - 緩存實體

有時,當我瀏覽特定的頁面時,NHibernate Profiler顯示了大量被獲取的緩存實體。幾百個緩存實體應該是相當數量的將被使用,但有時會計數到3000-5000。見下圖。

在這種情況下,真的有5002個實體從緩存中獲取,還是在NHibernate Profiler中有錯誤打印?

加載方式,一切似乎都沒問題。頁面請求已完成,但分析器繼續計數越來越多的緩存實體。

任何人都會遇到類似的事情,或者真的發生這種事嗎?

NHibernate Profiler Cache

回答

1

那麼,它真的獲取所有條目。此外,你的屏幕截圖被裁剪,但我假設你正在接收來自NHProf的警報,指出存在太多的緩存調用。

NH有兩種不同類型的緩存:查詢緩存和實體緩存。查詢緩存只存儲查詢產生的項目的標識(即沒有數據)。然後NH必須通過ID從實體緩存中單獨獲取項目。

更多信息在:http://ayende.com/blog/3112/nhibernate-and-the-second-level-cache-tips

要小心,這可能會在Web服務器會影響性能。我和你有完全相同的情況,並有更好的結果禁用這些實體的二級緩存。

此外,由於appender和NHProf之間存在一些延遲,因此即使在頁面加載後也會顯示新條目。 appender將所有日誌發送給NHProf,並且需要一些時間才能繪製所有信息。

+0

問題是我每次創建會話時都會初始化分析器。現在緩存的實體顯示正確。 – Mattias 2011-05-25 11:03:53

+0

順便說一句psousa,你怎麼得到更好的結果沒有啓用緩存? – Mattias 2011-05-25 11:04:19

+0

這很簡單。我的應用程序服務器是一個非常基本的虛擬機,沒有太多的RAM或CPU。數據庫服務器是一個功能強大的物理機器,具有很好的規格。在我的加載測試期間,以及多個用戶讀取和寫入信息時,CPU啓用緩存後容易達到100%,因爲某些屏幕會從緩存中加載數千個項目。就像我上面所說的,NHProf本身警告你不應該從緩存中加載太多的項目。我甚至用DotTrace分析了執行情況,並且花費了很多時間從第二級緩存讀取和寫入數據。 – psousa 2011-05-25 13:46:20