2009-04-18 6 views
0

Je suis actuellement en train de lire C# en profondeur par Jon Skeet et j'ai lu sur les types de valeur et de référence.Performance du passage des lots de types de valeur dans les paramètres

Je pensais au coût de l'utilisation de types de valeurs comme paramètres de méthode en raison de la copie de cette valeur lors de la transmission. Bien que ce coût ne soit pas important lorsqu'on considère les entiers, que se passe-t-il si ces paramètres de valeur sont des chaînes qui ont été transmises de nombreuses fois.

Serait-il avantageux d'utiliser une classe StringBuilder et de la passer à la place d'un type de chaîne? Si vous avez considéré que la chaîne était longue, disons 1024 caractères, et a été transmise juste quelques fois entre les méthodes, faites le contraste avec un StringBuilder avec la même valeur qui finirait par passer la valeur de la référence étant 4 ou 8 octets à chaque fois, vous pourriez avoir une performance considérable en amélioration.

Cette question peut également mettre en évidence un élément essentiel de compréhension que je pourrais manquer en ce qui concerne le type de corde, n'hésitez pas à le signaler si nécessaire.

En outre, quel impact cela aurait-il sur la récupération de place concernant les chaînes dans chaque instance? Edit: Apparemment, j'ai oublié une information essentielle sur les chaînes qui rend la question nulle et non avenue. Merci grover. La chaîne n'est pas un type de valeur, ce ne sont que des objets immuables.

Répondre

8

Passer une chaîne autour coûte le même coût que n'importe quel autre objet: La taille de sa référence, qui est de 4 octets sur Win32.

Remarque supplémentaire: La valeur sémantique du type de valeur (par passage de valeur) peut être implémentée par le compilateur de manière optimisée. Je n'ai pas regardé comment le JIT de MS le fait, mais il peut certainement envoyer seulement un pointeur dessus et exiger que la cible fasse une copie sur l'écriture.

C'est ce que nous allons faire dans le compilateur JIT/AOT Managed Operating System Alliance.

Questions connexes