Question

Je suis en train de prendre une décision sur la façon d'afficher mes données. Ce que j'ai maintenant une liste de produits affichés dans un répéteur. Mais pour le code d'entretien que j'ai mis mes articles de ce produit dans un chargement séparé usercontrol et les dans une boucle avec des résultats db en utilisant LoadControl.

Le contrôle du produit lui-même est très simple, à seulement quelques propriétés publiques comme le titre, url, note mais je ne suis pas sûr que cela affectera ma performance. Je l'ai fait un peu de lecture ici et sur les forums et certaines personnes disent qu'il est pas la meilleure pratique surtout si vous avez plus de 20 ou 30 de ces contrôles.

Alors, est-ce vraiment une performance due en utilisant cette méthode ou le fait de rester correct avec environ 10.000 visites par jour. Toutes les autres suggestions sont les bienvenus.

Était-ce utile?

La solution

Je l'ai fait quelques tests parce que je me suis intéressé à cela aussi, et il semble qu'il y ait comme un coup de performance assez significatif sur LoadControl par rapport à l'instanciation d'une classe normale.

Je l'ai testé créer 100.000 instances d'une classe simple avec une propriété contre 100.000 cas de chargement LoadControl un nouveau contrôle vide. Et ce fut 16ms pour les classes contre 1950ms pour le contrôle de la charge. Il semble y avoir beaucoup de frais généraux. J'ai remarqué que si j'ai ajouté plus de contrôles constitutifs au contrôle de l'utilisateur le temps de chargement est monté. (Ce qui est juste la charge que je n'ajoute pas les contrôles à la page ou RENDENT)

Est-il assez d'un coup à être perceptible à un utilisateur? Probablement pas, sauf si vous chargez une grande quantité de cas avec LoadControl.

Autres conseils

Je pense que faire un contrôle utilisateur distinct pour chaque produit est probablement pas la meilleure façon d'aller.

Cependant, vous êtes déjà en partie où vous devez être pour ma suggestion.

Pourquoi faites-vous pas une classe pour votre produit, avec toutes les propriétés que vous avez déjà défini votre contrôle utilisateur.

Lorsque vous récupérez les produits que vous affichez, récupérer une collection de produits (boucle à travers les enregistrements et créer la collection) (liste par exemple), et d'utiliser la collection comme source de données pour votre répéteur.

Lorsque vous utilisez Page.LoadControl dans une boucle, séparer dans sa propre fonction et ceci indiquera ASP.Net pour mettre en cache le contrôle au lieu de le charger à partir du disque à chaque fois.

Exemple: (VB)

Private Function LoadMyControl() As myCustomControl1
    Return Page.LoadControl("....")
End Function

Alors ...

For each [....]
   Dim myCtrl1 as myCustomControl1 LoadMyControl()
   myCtrl1.prop1 = "blah"
   myPlaceholder1.Controls.Add(myCtrl1)
Next

En encapsulant dans un appel de fonction du moteur de cache pense qu'il est le même contrôle utilisateur (ce qui est) et n'accéder au disque une fois, accélérant de manière significative.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top