2009-06-01 12 views
3

Je voudrais demander humblement à ces experts vb.net là-bas concernant l'optimisation du code. Mon exemple ici estOptimisation du code VB.Net?

a.

Dim lblEventCategory = CType(Me.gvSpecialEvent.Rows(e.NewEditIndex).FindControl("lblEventCategory"), Label) 

b.

Dim lblEventCategory As Label = CType(Me.gvSpecialEvent.Rows(e.NewEditIndex).FindControl("lblEventCategory"), Label) 

Lequel des deux est le plus efficace est-il la lettre A? ou lettre B? Est-ce que quelqu'un peut m'aider à comprendre ces codes?

Merci d'avance

Répondre

0

La première définit la lblEventCategory variable comme un type variant. C'est généralement pire que la seconde où vous utilisez un type explicite. Le type Variant est une sorte de "catch all" qui peut contenir n'importe quel type de variable, mais vous perdez tous les types de sécurité et d'avertissements que le compilateur aurait pu vous donner. Un type Variant utilise également plus de mémoire et sera plus lent au moment de l'exécution en raison des conversions qui doivent être effectuées sur celui-ci. En outre, les appels de méthode seront "late bound" - cela signifie que les appels à ces méthodes ne seront pas résolus avant l'exécution, lorsque le type de la variable est connu, l'appel est alors fait par nom. Ceci est typiquement astronomiquement plus lent que si vous utilisez le type explicite où l'appel peut être fait "lié tôt" (c'est-à-dire, au moment de la compilation). D'autre part, les types de variantes ont leur place. Ils sont utiles dans la programmation OLE automation (COM), si vous interagissez avec un langage comme VBScript qui ne supporte que les types de variantes. Dans ce cas, il peut être judicieux de placer les appels dans le code lié en retard afin que le type de variante soit converti vers et à partir du type correct à la limite de l'appel.

+0

Incorrect. Avant vb2008, le premier est défini comme un type d'objet, pas une variante. Dans vb2008 (en supposant que Option Infer On) est défini comme une étiquette. – ggf31416

+0

Il n'existe pas de type de variante dans VB.NET. –

4

si nous parlons .Net 3.5 que ce que 1800 INFORMATION dit n'est pas vrai puisque l'inférence de type aura lieu et le compilateur déduira le type et donc sera typé. donc dans .Net 3.5 a et B sont les mêmes.

Dans Visual Studio 2008, activez ou désactivez Option Infer pour voir la différence. Avant .Net 3.5, aucune inférence de type n'aura lieu et elle utilisera le type de variante ou plutôt le type d'objet. Donc, dans pre.Net 3.5 A et B ne sont pas les mêmes.

+2

In vb2008 L'inférence de type est une fonctionnalité de langage, indépendante de la version de la structure. Si .net 2.0 est ciblé, l'inférence de type ne changera pas. – ggf31416

2

En .NET 3.5 Dim x = la valeur est la même que C# var x = valeur; Le compilateur déduira le type de sorte que les deux sont égaux à l'exécution.

+0

Voir le commentaire de ggf31416 à la réponse de chrissie1. L'inférence de type fonctionne dans Visual Studio 2008 quelle que soit la version du framework (oui, cela fonctionne même si vous ciblez .Net 2.0). – chyne