Il ne s'agit pas d'une optimisation prématurée en soi. Sur le garbage collector et la mémoire en général, que feraient des centaines d'opérations (beaucoup pourraient être dupliquées) à un programme, principalement en ce qui concerne l'immuabilité des chaînes de caractères?Impact de Multiple .ToUpper() 'ing
Répondre
Chaque appel à ToUpper
créera une nouvelle instance de chaîne, même si le contenu est identique à l'original et même si la chaîne existe déjà en tant que chaîne de caractères interne. Par conséquent, l'impact de centaines d'appels ToUpper
est que vous créez des centaines d'instances de chaîne. Si les chaînes sont courtes, ce n'est pas un problème, surtout si vous n'utilisez que les chaînes pendant une courte période. Le ramasse-miettes est conçu pour gérer efficacement de petits objets de courte durée.
Exemple:
// Interned string literals are the same instance:
string a = "asdf";
string b = "asdf";
Console.WriteLine(Object.ReferenceEquals(a, b)); // True
// ToUpper naturally creates a new instance if the content is changed:
string c = b.ToUpper();
Console.WriteLine(Object.ReferenceEquals(b, c)); // False
// ToUpper creates a new instance even if the content is unchanged:
string d = c.ToUpper();
Console.WriteLine(Object.ReferenceEquals(c, d)); // False
// ToUpper will not intern strings:
string e = "ASDF";
string f = e.ToUpper();
Console.WriteLine(Object.ReferenceEquals(e, f)); // False
// Dynamically created strings can be interned manually:
string g = String.Intern(f);
Console.WriteLine(Object.ReferenceEquals(e, g)); // True
Chaque appel .ToUpper()
crée une nouvelle chaîne. Ainsi, des appels supplémentaires sont définitivement inefficaces. Il est prudent et professionnel d'essayer de minimiser autant d'appels inutiles et dupliqués que possible.
string Nacho = "cheesy"
Nacho = Nacho.ToUpper()
Nacho = Nacho.Trim().ToUpper()
. . . crée beaucoup de déchets de chaîne. Cependant, si ce code n'a pas besoin d'être extrêmement rapide, vous n'avez pas besoin d'être trop paranoïaque. Bien que chacune de ces chaînes orphelines doive être collectée, ces petites chaînes locales sont presque toujours récupérées dans les collections partielles du GC, et la mémoire est renvoyée très rapidement. Assurez-vous que vos chaînes sont déclarées dans la portée la plus limitée possible (par exemple, dans une routine plutôt que dans la classe).
Des centaines? Presque rien dans la plupart des cas, en supposant qu'ils ne sont pas des chaînes énormes et que vous avez une quantité raisonnable de mémoire. Des centaines de millions pourraient bien avoir un impact.
Fondamentalement, chaque appel devra créer une nouvelle chaîne (je ne ai pas pense .NET détecte que c'est déjà majuscule). À moins que ce soit la majeure partie de ce que vous faites, je ne m'attendrais pas à ce que ce soit un goulot d'étranglement - mais le profilage aidera à vérifier cela.
- 1. C++ toupper - fonction standard?
- 2. C# Substring et ToUpper
- 3. echo-ing Symbole de l'euro
- 4. Math derrière Bump (ing)?
- 5. prototype JavaScript (ing) question
- 6. grep-ing plusieurs fichiers
- 7. Problèmes POST-ing avec pyCurl
- 8. requête ing LINQ to Object
- 9. exceptions de licence Infragistics lorsque MSBuild-ing
- 10. Cassandra - Impact de la configuration de ColumnFamilies
- 11. Est-ce que PHP inclut des fonctions toupper et tolower?
- 12. impact de l'index dans la requête SQL
- 13. impact de SSL sur le serveur Web
- 14. Impact des performances d'appel de StreamWriter flush()
- 15. Test Impact sur le changement de code
- 16. Impact des identifiants de compte AWS
- 17. Liste déroulante de sélection multiple multiple
- 18. iPhone4 960x640 - impact sur les applications?
- 19. Comment utiliser le toupper de VIM dans une chaîne de remplacement?
- 20. Impact de l'authentification unique sur l'expiration de la session
- 21. Rails: impact de beaucoup de gemmes sur la performance?
- 22. Impact des performances de l'utilisation de Workflow Foundation
- 23. Impact de l'activation de WebSphere PMI sur les performances
- 24. `strip`ing les résultats d'une scission en python
- 25. Tee-ing entrée (cin) sur un fichier journal (ou sabot)
- 26. eval-ing une fonction, la performance après avoir été evaled
- 27. EntityCollection: Puis-je effacer() sans d'abord charger() ing?
- 28. realloc() ing mémoire pour un tampon utilisé dans recv()
- 29. Email de cronjob multiple
- 30. Convertisseur de liaison multiple?
vous devriez probablement essayer d'utiliser ToUpperInvariant() comme ToUpper() est la culture sensible. – ram