簡體   English   中英

在ASP.NET中緩存用戶控件?

[英]Caching a user control in ASP.NET?

我在我的應用程序“header.ascx”中創建了一個用戶控件,我將一個selectedMenu屬性設置為此控件,控件在該控件上選擇指定的selectedMenu值。 假設,我已經通過了值“home”或“search”,那么它將選擇(突出顯示)搜索菜單。

我想緩存這個控件,當selectedMenu屬性的值發生變化時,只刷新緩存,否則它應該從緩存中獲取控件?

是否可以在asp.net中緩存用戶控件? 我使用的是ASP.NET 2.0(C#)

ASP.NET中的用戶控件緩存稱為片段緩存 這是通過在頁面頂部添加一個OutputCache指令來完成的:

您無法通過在控件上設置屬性來更改緩存,因為如果在緩存中找到控件,則實際上不會創建控件。 如果您嘗試在其緩存后面的代碼中訪問該控件,則它將為null。

判斷是否應該緩存控件的條件是否可以通過查看當前請求來確定? 如果是,則可以使用輸出緩存指令的varybycustom屬性( http://msdn.microsoft.com/en-us/library/system.web.ui.partialcachingattribute.varybycustom.aspx )。 您可以將所需的任何字符串作為參數放入,然后在評估緩存時,將調用Global.asxa中GetVaryByCustomString()方法,並且可以設置是否應該緩存控件的邏輯。

當然可以! 它被稱為“片段緩存”。 這是Quickstarts頁面MS知識庫的鏈接。 此外, 谷歌

我不認為緩存控件本身是個好主意:

  • 第一次創建控件時,它會引用其父頁面等。
  • 從緩存中檢索控件時,這些引用不再存在。

我認為,更好的方法是緩存控件正在使用的數據。 ASP.NET在頁面生命周期中創建了很多控件,緩存這一個控件實際上並沒有改進任何東西。

然后是一個愚蠢的問題:這個控制是一個瓶頸嗎? 你真的需要緩存嗎?

總結一下

使用VaryByCustom,意思是

1-再次構建控件。
2-在緩存中有多個版本的控件。 將在自定義條件滿足時使用。

這只有在控件花費大量時間構建並且我們擁有有限數量的緩存版本以避免浪費內存時才有用,並且應用程序將需要訪問控件屬性(當它被緩存為“或null”時)。

但是,如果自定義條件取決於控件屬性本身,那就不好了。 我無法訪問它,它是null。

例如,我想編寫類似if(在國家/地區列表中的默認選定值不是美國)然后重建和緩存(給它一個不同的字符串)

否則不要

當其他對象試圖訪問contries列表時,它將檢查null,並將countries下拉列表設置為USA。

數據cahing將完成工作。 這是唯一的方法。

誰同意?

謝謝你的時間

暫無
暫無

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

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