2009-10-25 109 views
0

在一個模塊中,我有一個創建modalpopup和顯示行動的結果的子..我不想丟棄&拖動modalpopup擴展和使HTML複雜,因此我在代碼隱藏這樣做。我想知道我可以緩存我的面板,然後從緩存中獲取它嗎?需要時間來裝箱這些面板。或者你有推薦來改善這個Sub的性能嗎?我使用Script Combining,JS minify和Css minify。我的子代碼在這裏。控制緩存在asp.net

Public Sub Raise_Alarm(ByVal p_Page As Page, ByRef p_AssignedButton As System.Web.UI.WebControls.Button, ByVal p_Message As String, Optional ByVal p_Type As MessageType = MessageType.Success) 

    Dim placeHolder As PlaceHolder = p_Page.FindControl("plcMsg") 

    Dim lblStatus As System.Web.UI.WebControls.Label 
    lblStatus = p_Page.FindControl("lblStatus") 
    lblStatus.Width = Unit.Percentage(100) 
    lblStatus.Font.Name = "verdana" 
    lblStatus.Font.Size = System.Web.UI.WebControls.FontUnit.XSmall 


    'Create Modalpopup extender 
    Dim mdlMessage As New AjaxControlToolkit.ModalPopupExtender 

    'Create Divs 
    Dim pnlMessage As New System.Web.UI.WebControls.Panel 
    Dim pnlFrame As New System.Web.UI.WebControls.Panel 
    Dim pnlContainer As New System.Web.UI.WebControls.Panel 
    Dim pnlHeader As New System.Web.UI.WebControls.Panel 
    Dim pnlMsg As New System.Web.UI.WebControls.Panel 
    Dim pnlBody As New System.Web.UI.WebControls.Panel 
    Dim pnlFooter As New System.Web.UI.WebControls.Panel 
    Dim pnlRight As New System.Web.UI.WebControls.Panel 
    '******* 

    'Create Ok Buttons 

    Dim btnOk As New System.Web.UI.WebControls.Button 

    'Create Message Label 

    Dim lblMessage As New System.Web.UI.WebControls.Label 
    Dim myheader As New System.Web.UI.WebControls.Label 
    'Assign Properties 

    pnlMessage.ID = "pnlMessage" 
    pnlMessage.CssClass = "modal-dialog" 
    pnlMessage.Style.Add("display", "none") 

    pnlFrame.ID = "pnlframe" 
    pnlFrame.CssClass = "frame" 
    pnlContainer.ID = "container" 
    pnlContainer.CssClass = "container" 
    pnlHeader.ID = "header" 
    pnlHeader.CssClass = "header" 

    myheader.ID = "headerlabel" 
    myheader.Text = "Warning" 

    pnlMsg.ID = "msg" 
    pnlMsg.CssClass = "msg" 

    pnlBody.ID = "body" 
    pnlBody.CssClass = "body" 

    pnlFooter.ID = "footer" 
    pnlFooter.CssClass = "footer" 

    pnlRight.ID = "right" 
    pnlRight.CssClass = "right" 

    btnOk.ID = "btnOk" 
    btnOk.Width = Unit.Pixel(50) 
    btnOk.Text = "Ok" 
    btnOk.CssClass = "but"  
    btnOk.OnClientClick = "Dispose()" 



    lblMessage.ID = "lblMessage" 
    lblMessage.Text = p_Message 
    lblMessage.CssClass = "body" 

    If p_Type = MessageType.Success Then 

     lblStatus.ForeColor = System.Drawing.Color.Blue 
     lblStatus.Text = p_Message 
     lblStatus.Visible = True 

    ElseIf p_Type = MessageType.Error Then 

     lblStatus.ForeColor = System.Drawing.Color.Red 

    End If 


    pnlRight.Controls.Add(btnOk) 
    pnlFooter.Controls.Add(pnlRight) 
    pnlBody.Controls.Add(lblMessage) 
    pnlBody.Controls.Add(pnlFooter) 
    pnlMsg.Controls.Add(myheader) 
    pnlHeader.Controls.Add(pnlMsg) 
    pnlContainer.Controls.Add(pnlHeader) 
    pnlContainer.Controls.Add(pnlBody) 
    pnlFrame.Controls.Add(pnlContainer) 
    pnlMessage.Controls.Add(pnlFrame) 


    With mdlMessage 


     .TargetControlID = p_AssigedButton.ID 
     .PopupControlID = pnlMessage.ID 
     .ID = "mdlMessage" 
     .BackgroundCssClass = "modalBackground" 
     .OkControlID = btnOk.ID 
     .Page = p_Page 

    End With 

    placeHolder.Controls.Add(pnlMessage) 
    placeHolder.Controls.Add(mdlMessage) 
    mdlMessage.Show() 
End Sub 
+0

你試過HttpContext.Current.Cache ? – 2009-10-25 09:40:05

+0

不,我沒試過。我可以用它來控制嗎? – Alexander 2009-10-25 10:00:05

+0

看看右邊的相關問題,例如:http://stackoverflow.com/questions/44757/how-to-cache-asp-net-user-controls – 2009-10-25 12:06:55

回答

1

您是否測量了此子表現?

我們只看了一次,發現即使是1000個創建對象仍然只有幾納秒。

如果你想緩存一些東西,它必須是可序列化的。爲了給你一個改進,它必須花費更少的時間來反序列化,而不是創建一個新的對象。

它看起來不像是從數據庫中獲得任何值,所以我不認爲你可以通過緩存來優化這段代碼。

編輯

有一對夫婦的其他原因不能緩存:

  • 它你的程序複雜,你需要檢查,如果值是在緩存中,然後才能使用它。
  • 有引入錯誤的可能性。以lblStatus爲例,這會根據參數更改值。如果您只是從緩存中讀取它,您可能會得到一個與您的參數不匹配的文件。
+0

嗨西拉, 我已經測量過的表演,它不需要花費1秒鐘來創建這些對象。但想象一下,1000個用戶打開頁面並創建這些對象,是否會降低性能?我嘗試過Alison的緩存建議,但仍然認爲這樣做它給我的性能好處,從緩存中取div的?你知道asp.net ajax的控件有時可以影響應用程序不好,我不想遇到性能問題,因此我想嘗試緩存解決方案 – Alexander 2009-10-25 14:29:37

+0

你應該只考慮性能,當它變成一個問題。用真實的計劃金額與用戶數進行壓力測試,看看會發生什麼。在大多數情況下,僅使用ASP.Net中的每頁緩存機制就足夠了。 – 2009-10-26 05:07:17

0

要插入控制到緩存:

//Make sure to adjust the expiration of the cache with a contstant 
Cache.Insert("pnlPanelMessage", pnlMessage, null, DateTime.MaxValue, TimeSpan.FromMinutes(15)); 

要檢索控制fromt他緩存:

System.Web.UI.WebControls.Panel pnlMessage = (System.Web.UI.WebControls.Panel)Cache.Get("pnlPanelMessage") 

MSDN:ASP.NET Caching: Techniques and Best Practices