A propos étant plus rapide/meilleure mémoire:
J'ai regardé dans cette question avec Java, je suppose que .NET serait aussi intelligent à ce sujet.
L'implémentation de String est assez impressionnante.
L'objet String pistes « longueur » et « partagée » (indépendante de la longueur du tableau qui contient la chaîne)
donc quelque chose comme
String a = "abc" + "def" + "ghi";
peut être mis en œuvre (par le compilateur/exécution) comme:
- Extend the array holding "abc" by 6 additional spaces.
- Copy def in right after abc
- copy ghi in after def.
- give a pointer to the "abc" string to a
- leave abc's length at 3, set a's length to 9
- set the shared flag in both.
comme la plupart des chaînes sont de courte durée, ce qui rend pour un code très efficace dans de nombreux cas. le cas où il est absolument pas efficace est quand vous ajoutez à une chaîne dans une boucle, ou lorsque votre code est comme ceci:
a = "abc";
a = a + "def";
a += "ghi";
Dans ce cas, vous êtes beaucoup mieux à l'aide d'une construction StringBuilder. Mon point est que vous devez faire attention quand vous optimisez, à moins que vous soyez absolument sûr que vous savez ce que vous faites, ET vous êtes absolument sûr que c'est nécessaire, ET vous testez pour vous assurer que le code optimisé rend un cas d'utilisation , il suffit de le coder de la manière la plus lisible possible et n'essayez pas de surpasser le compilateur. J'ai perdu 3 jours à jouer avec des chaînes, à mettre en cache/réutiliser des chaînes de caractères et à tester la vitesse avant de regarder le code source des chaînes et de comprendre que le compilateur le faisait déjà mieux que je le pourrais.Ensuite, je devais expliquer comment je ne savais vraiment pas ce que je faisais, je pensais seulement que je l'ai fait ...