我有一些在同一會話中經常訪問的大型實體。例如,在我的應用程序中有一個由動態生成的圖表圖像組成的報告頁面。對於此頁面上的每個圖表圖像,客戶端向相應的控制器發出請求,並且控制器使用某些實體生成圖像。 我可以使用asp.net的會話字典來「緩存」這些實體,也可以使用nhibernate的二級緩存支持,例如使用緩存查詢。依賴於nhibernate的二級緩存vs將對象推入asp.net會話
您的意見是?
順便說一下,我將使用共享主機,是nhibernate的二級緩存託管友好?
謝謝。
我有一些在同一會話中經常訪問的大型實體。例如,在我的應用程序中有一個由動態生成的圖表圖像組成的報告頁面。對於此頁面上的每個圖表圖像,客戶端向相應的控制器發出請求,並且控制器使用某些實體生成圖像。 我可以使用asp.net的會話字典來「緩存」這些實體,也可以使用nhibernate的二級緩存支持,例如使用緩存查詢。依賴於nhibernate的二級緩存vs將對象推入asp.net會話
您的意見是?
順便說一下,我將使用共享主機,是nhibernate的二級緩存託管友好?
謝謝。
我認爲你應該使用NHibernate的緩存。如果用戶提出不同的請求以逐個獲取每個實體,那麼您可能應該使用不同的NHibernate ISession實現來獲取它們(因爲每個Web請求策略會話)。
另外,當使用Nhibernate緩存時,您不會遇到併發問題 - 它會爲您處理它們。
請注意將一個實體(從您將它加載的會話中)緩存到一個靜態變量中,然後由另一個會話(例如,從您創建的緩存系統中提取)訪問該實體。
實體實例與Session相關聯,因此您不應該在Session邊界上混合和匹配實例。
我已經通過創建類的輕版本(即不是NH會話感知)並緩存該基本類來解決此問題。
另外,使用第二級緩存,它沒有這個問題。
我會將圖像寫入磁盤,然後直接將它們作爲圖像src引用。 – 2010-04-18 19:26:27
我的問題的範圍不受此特定問題的限制。我不想管理託管中生成的圖像文件的生命週期。 – Serguzest 2010-04-18 20:58:53