2010-01-21 8 views
1

Tout en travaillant dans un projet aujourd'hui, je suis tombé sur le code suivant:Coût des instanciations multiples

pcShowByCategory.Controls.Add(new LiteralControl("<div id='lblDivP'>")); 
pcShowByCategory.Controls.Add(new LiteralControl("<table width=100%><tr><td colspan='2' align ='left'>")); 
pcShowByCategory.Controls.Add(lblTitle); 
pcShowByCategory.Controls.Add(new LiteralControl("</br>")); 
pcShowByCategory.Controls.Add(new LiteralControl("</br>")); 
pcShowByCategory.Controls.Add(new LiteralControl("</td></tr><tr><td colspan='2'>")); 
pcShowByCategory.Controls.Add(lbltitle1); 
pcShowByCategory.Controls.Add(new LiteralControl("</br>")); 
pcShowByCategory.Controls.Add(new LiteralControl("</td></tr><tr><td colspan='2'>")); 

Ma première pensée était: pourquoi dans le monde ne font-ils pas cela dans une ou deux lignes au lieu de créer autant de nouveaux LiteralControls. Ma question est - est-ce bâclé et gaspillage de mémoire, et aurait dû être consolidé à une ou deux instanciations de LiteralControl, ou est-ce pas grave?

+0

J'ai vu cela, et édité - merci – Ron

+0

ou en surbrillance bloc de code et appuyez sur le bouton 101 010 dans la barre de formatage. – gingerbreadboy

+0

Peut-être qu'ils étaient habitués à Java Servlets out.println'ing chaque ligne: P – SwDevMan81

Répondre

0

Je pourrais imaginer que c'est pour une raison: Si vous créez une seule instance de LiteralControl pour une valeur particulière, vous pourriez seulement pouvoir ajouter cet objet à la collection une fois, selon le conteneur Controls dans lequel il va. Certaines collections ne permettent pas au même objet unique d'y être deux fois ou plus; par conséquent, la nécessité de créer de nombreux cas uniques, même si certains d'entre eux ont la même valeur:

pcShowByCategory.Controls.Add(new LiteralControl("</br>")); 
pcShowByCategory.Controls.Add(new LiteralControl("</br>")); 

En tout cas, ce code ne semble pas particulièrement agréable à mes yeux.

+0

Oui, je pense que l'ajout de tout le code HTML sur une seule ligne est bien, car le navigateur ne se soucie pas si elle est bien espacée. Ceci est utilisé dans un site sharepoint où tout le code est généré automatiquement de toute façon, alors pourquoi essayer d'en faire 1%? – Ron

1

si elles sont toutes des cordes codées en dur alors quelqu'un devrait être tiré.

les 10 secondes refactor minimum ...

pcShowByCategory.Controls.Add(new LiteralControl("<div id='lblDivP'><table width=100%><tr><td colspan='2' align ='left'>")); 
pcShowByCategory.Controls.Add(lblTitle); 
pcShowByCategory.Controls.Add(new LiteralControl("</br></br></td></tr><tr><td colspan='2'>")); 
pcShowByCategory.Controls.Add(lbltitle1); 
pcShowByCategory.Controls.Add(new LiteralControl("</br></td></tr><tr><td colspan='2'>")); 

... est encore assez nul, mais pas tout à fait aussi glacer le sang.

Toujours en cours de sélection pour une refonte.

+0

oui, c'est précisément ce que je pensais - mais qu'en est-il de l'utilisation des ressources? est-ce une mauvaise pratique simplement à cause d'une technique de codage bâclée, ou d'une mauvaise pratique à cause de la perte potentielle de performance dans le monde réel (si ce type de mauvais codage est utilisé partout)? – Ron

+1

@Ron: l'impact sur les performances du code bâclé est difficile à déterminer en examinant uniquement le code brut lui-même. Le compilateur est assez bon pour optimiser les performances et, par conséquent, il est souvent préférable d'écrire du code lisible plutôt que d'essayer d'optimiser manuellement des structures de codage relativement simples. Cet exemple tombe cependant dans la catégorie «inutilement bâclée» - mais en général, vous ne pouvez pas sauter aux conslusions avec la preuve de l'impact sur les performances - c'est juste une optimisation prématurée. – STW