2009-10-15 6 views

Répondre

10

Il n'y a pas de boxe ou de déballage. Pourquoi demandes-tu? L'algorithme d'analyse syntaxique est beaucoup plus cher qu'une opération box/unbox, donc vous ne "sentirez" pas une différence de performance, même s'il y en avait une.

2

Je ne crois pas qu'il y ait un déballage là-bas. Je suppose que le code utilise une variable int et la renvoie, donc pas de boxe/unboxing.

Édition: Je suis d'accord avec 280Z28. J'ai juste regardé le code et c'est assez complexe. La valeur finale n'est pas encadrée comme je l'avais imaginé, mais il y a de longues étapes de pré-traitement pour y arriver, donc en effet il n'y aurait pas beaucoup de changement de performance même si elle était encadrée. Par ailleurs, si vous ne le saviez pas, vous pouvez regarder le code vous-même en utilisant Reflector.

+1

Ou regardez simplement la version de Mono. Autour de la ligne 114: http://anonsvn.mono-project.com/viewvc/trunk/mcs/class/corlib/System/Int32.cs?revision=138730&view=markup – Dykam

0

Oui. En utilisant Reflector, vous pouvez voir exactement ce qui se passe. Je ne vois pas la boxe, mais il y a quelques moulages, par exemple:

private static unsafe void StringToNumber(string str, NumberStyles options, ref NumberBuffer number, NumberFormatInfo info, bool parseDecimal) 
{ 
    if (str == null) 
    { 
     throw new ArgumentNullException("String"); 
    } 
    fixed (char* str2 = ((char*) str)) 
    { 
     char* chPtr = str2; 
     char* chPtr2 = chPtr; 
     if (!ParseNumber(ref chPtr2, options, ref number, info, parseDecimal) || 
      ((((long) ((chPtr2 - chPtr)/2)) < str.Length) && //cast 
      !TrailingZeros(str, (int) ((long) ((chPtr2 - chPtr)/2))))) //cast 
     { 
      throw new FormatException(Environment.GetResourceString("Format_InvalidString")); 
     } 
    } 
} 

ou cela, se produit dans une boucle:

private static unsafe char* MatchChars(char* p, string str) 
{ 
    fixed (char* str2 = ((char*) str)) //cast 
    { 
     char* chPtr = str2; 
     return MatchChars(p, chPtr); 
    } 
} 

La vraie question est - donc?

0

Pour ajouter mon bit.

Le terme/technique de "Unboxing" est UNIQUEMENT pertinent pour un type de valeur encadré. Ainsi, si une variable de type valeur n'est pas encadrée (convertie en type de référence), elle peut être décapsulée.

Dans votre cas, vous disposez d'une valeur de type de référence valide, qui n'a aucune portée à dégrouper.