2012-03-01 56 views
1

我正在使用母版頁,其中菜單根據代碼中的用戶角色動態生成。所有應用程序都使用相同的菜單註銷特定用戶。因此,不需要重新創建它,我需要爲所有應用程序提供相同的菜單。菜單在StringBuilder中,它的大小非常大。爲什麼會話或數據緩存更好,內存消耗更少?請建議?我可以使用什麼會話或緩存

我想提高母版頁的性能。

感謝

回答

1

我想緩存會更好,因爲你將有一個角色只有一個實例創建,但會議將使它創建多個實例多達用戶訪問,你將不得不等待會話超時有時以釋放內存

+0

supose我有4個角色。這意味着只有4菜單被緩存在內存中,並根據用戶角色用戶使用這些菜單我對不對? – Areeb 2012-03-01 13:32:40

+0

是的,或者你可以把它放到應用程序狀態中,因爲你不需要刷新它們,所以緩存是假設存儲需要刷新的數據,你的web服務器可能會在高負載下丟棄緩存對象,但是應用程序狀態可以永久保存,請查看:http://msdn.microsoft.com/en-us/library/94xkskdf。ASPX – 2012-03-01 13:47:03

0

如果每個用戶都將獲得相同的菜單:

你應該考慮把它在應用程序「高速緩存」 - 應用[「的MyMenu」]或在一個靜態字段的對象。

這個的主要原因是終身。如果將它放在應用程序級別的對象中,則它將持續應用程序的生命週期。把它放在會話級別的對象中會導致它在會話結束時丟失 - 因爲會話是按用戶啓動的,那麼你很快就會發現自己正在回憶數據。

在另一方面......如果它的每個用戶的獨特之處:

會議提供了一個方便的地方來存放這些數據,因爲它是唯一的用戶,並且將活不長了以後該用戶離開該網站。

想想也是:

如果你真的覺得記憶將是一個問題,或者你想定義你究竟有多長保持爲

把它放在高速緩存。您可以確定其在緩存中的時間量,此外,緩存將在內存不足時開始轉儲對象 - 因此它比其他選項更加敏感。

還有就是Session vs Cache on SO already

此外

商量好了你確定你的菜單是大嗎?如果是這樣,你可能需要考慮其他選擇 - 你說話有多大?

+0

是內存的問題,字符串是圍繞113線和每一位用戶菜單不同 – Areeb 2012-03-01 13:30:39

+0

那麼它屬於在緩存中,並且您的代碼將1)建立菜單,2)用鑰匙把它放在緩存中爲該用戶和3)返回菜單。檢索代碼將1)檢查菜單是否在緩存中2)如果是,返回它或3)生成菜單並將其放回緩存中,然後返回。您需要將檢索成本與用於緩存的內存進行平衡。 – dash 2012-03-01 13:57:05

+0

感謝您的幫助。 – Areeb 2012-03-02 10:17:06