Je suis de la navigation sur le code source de l'Open Source SignalR projet, et je vois cette diff de code qui a le droit "de Ne pas utiliser StringBuilder ou foreach dans cette chaude chemin de code" :
- public static string MakeCursor(IEnumerable<Cursor> cursors)
+ public static string MakeCursor(IList<Cursor> cursors)
{
- var sb = new StringBuilder();
- bool first = true;
- foreach (var c in cursors)
+ var result = "";
+ for (int i = 0; i < cursors.Count; i++)
{
- if (!first)
+ if (i > 0)
{
- sb.Append('|');
+ result += '|';
}
- sb.Append(Escape(c.Key));
- sb.Append(',');
- sb.Append(c.Id);
- first = false;
+ result += Escape(cursors[i].Key);
+ result += ',';
+ result += cursors[i].Id;
}
- return sb.ToString();
+ return result;
}
Je comprends pourquoi foreach pourrait être moins efficace parfois, et pourquoi il est remplacé par pour.
Cependant, j'ai appris et expérimenté que le StringBuilder est le moyen le plus efficace pour concaténer des chaînes. Donc, je me demande pourquoi l'auteur a décidé de le remplacer à la norme de concaténation.
Quel est le problème ici, et en général sur l'utilisation de StringBuilder ?