說我有對象A,其具有類型對象B的成員,..和對象B具有Object類型的構件C..NET序列化和高速緩存問題
對象A很少變化,但被讀取很頻繁,而對象C經常這樣做。緩存對象A是有意義的,但是當它被序列化進入緩存時,顯然會將整個圖表序列化。
情景: 對象A從數據庫和填充閱讀。對象C的變量被訪問並延遲加載。爲了舉例,C.Status在業務邏輯中被引用,並且具有值ACTIVE。我將A.Name更改爲「New Name」,並提交給數據庫和緩存。
對象C(從代碼別的地方)有它的狀態改爲掛起。
- 此時我應該使對象A的緩存無效? *
如果我做的:
如果(A.B.C.Status == ACTIVE) SendLotsOfMoney(A)
這會通過,因爲整個圖形序列化。
如果C.Status勤換我不想保持的高速緩存失效,因爲我可能會經常提到A.Name,A.Status等,並且不希望保留命中數據庫。
我想我的選擇是: 1)在對象中有一個標誌,它來自緩存,並強制重新載入所有的依賴關係,如果它已經被引用並且它們被引用(延遲重載它們) 。無論如何,這些可能來自緩存......但是當時我的緩存中仍然有很多毫無意義的存儲數據。
2)保持無效緩存。很明顯,如果我有A.B.C.D.E.F.G.Status和A.H.I.J.K.Status等,那麼我會一直在重新創建A?
3)我重寫OnDeserialization和做的是在(1)
4)我重寫OnSerialization並設置所有引用爲空(所以他們延遲加載,而不是存儲在哪裏?)
我m有興趣聽到答覆。我傾向於4
問候!
你不應該違反德米特法! – jason 2010-01-02 13:22:34
這可能是真的,但我繼承了另一個系統,並且存在與往返於DB的性能問題 – sjhuk 2010-01-02 13:45:44