2010-07-22 7 views
2

Nous avons donc ce code hérité qui affiche les données dans un format arborescent. Ils tamponnent chaque noeud de l'arbre à l'aide d'images d'espacement (... yup..ugh)Réutilisation de UserControls coûteux

Malheureusement, l'utilisation de ces images est contrôlée par un UserControl interne que nous sommes obligés d'utiliser (essentiellement dérive de Web.UI.WebControls.Image, cependant). Eh bien, il se trouve que nous avons un arbre énorme avec des milliers de nœuds, chacun à quatre niveaux de profondeur ou plus. Cela signifie que nous créons environ 10 000 images de remplissage à chaque fois que nous dessinons la page, ce qui prend beaucoup de temps.

Ma solution est actuellement de pré-allouer statiquement un grand nombre de ces images et les utiliser. J'espère qu'il n'y aura aucune méchanceté qui apparaîtra lorsque plusieurs utilisateurs accèdent à la page en même temps.

Toutefois ... existe-t-il un moyen de réutiliser un UserControl de sorte que nous puissions créer une seule instance de l'image et l'ajouter en plusieurs fois aux collections Controls? J'ai essayé naïvement et ça n'a pas marché. L'image ne se dessine qu'une seule fois, pour le premier contrôle ajouté à la première fois (probablement quelque chose à faire avec INamingConainer ...?)

+0

sont les images de paddding créées à la volée par ce contrôle, ou faire ils pointent simplement vers une image statique hébergée quelque part? –

+0

Le contrôle est-il littéralement juste une image? Ou at-il des propriétés spéciales/CSS? – GenericTypeTea

Répondre

0

Avez-vous envisagé de charger le contenu de l'arbre dans un fil arrière?

+0

Malheureusement, je ne pense pas que cela aiderait beaucoup. Le problème est le temps de chargement global de la page et l'expérience utilisateur. La génération de ces contrôles 10k Image domine tout le temps dans le temps. –

2

Juste une idée, mais avec un contrôle utilisateur différent pouvez-vous pas simplement remplacer le Rembourrage Image Control utilisateur, tels que:

public DivPadder : HtmlGenericControl 
{ 
    public DivPadder() : base("div") 
    { 
     this.Style.Add("padding:10px"); 
    } 
}