2009-10-25 7 views
0

Dans un module j'ai un sous qui créer modalpopup et montrer le résultat de l'action .. Je ne veux pas laisser tomber & drag modalpopup extendeur et faire complexe html donc je le fais dans le code-behind.Je me demande que Puis-je mettre en cache mon panneau et puis l'obtenir à partir du cache? Il faut du temps pour créer ces panneaux.Ou, avez-vous des recommandations pour améliorer les performances de ce sous? J'utilise Script Combining, JSminify et Css minify.My sous le code est ici.Control Cache Dans 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

Avez-vous essayé HttpContext.Current.Cache ? –

+0

Non, je n'ai pas essayé.Puis-je l'utiliser pour les contrôles? – Alexander

+0

Jetez un oeil à des questions connexes à droite, par exemple: http://stackoverflow.com/questions/44757/how-to-cache-asp-net-user-controls –

Répondre

1

Avez-vous évalué la performance de ce sub?

Nous avons examiné cette fois et constaté que même 1000 de créer des objets étaient encore seulement quelques nano secondes.

Si vous souhaitez mettre en cache quelque chose, il doit être sérialisable. Pour que cela vous apporte une amélioration, il faut moins de temps pour désérialiser, que ce qu'il faut pour créer un nouvel objet frais.

Il ne semble pas que vous receviez des valeurs d'une base de données, donc je ne pense pas que vous pouvez optimiser ce code avec la mise en cache.

EDIT

Il y a deux autres raisons de ne pas faire la mise en cache:

  • Il complique votre programme, vous devez vérifier si une valeur est dans le cache avant de pouvoir l'utiliser .
  • Il existe des possibilités d'introduction d'erreurs. Prenez par exemple lblStatus, cela change la valeur en fonction des paramètres. Si vous venez de le lire dans le cache, vous pouvez en obtenir un qui ne correspond pas à vos paramètres.
+0

Salut Shiraz, J'ai mesuré la performance ofcourse il ne prend même pas 1 seconde pour créer ces objets.Mais imaginez que 1000 utilisateurs ouvrent la page et créent ces objets, ne pas détériorer les performances? J'ai essayé la recommandation de cache d'Alison, mais toujours penser que il me donne des avantages de performance pour prendre div du cache? Vous savez les contrôles d'asp.net ajax parfois peuvent influencer l'application mal, je ne veux pas rencontrer un problème de performance donc je veux essayer la solution cache – Alexander

+0

Vous ne devriez penser à la performance, quand il devient un problème. Faites un test de stress de votre application avec le nombre d'utilisateurs par rapport à la quantité réelle prévue, et voir ce qui se passe. Dans la plupart des cas, il suffit d'utiliser les mécanismes de mise en cache par page dans ASP.Net. –

0

Pour insérer le contrôle dans le cache:

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

Pour récupérer le contrôle fromt il cache:

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

MSDN: ASP.NET Caching: Techniques and Best Practices