Maison  >  Article  >  développement back-end  >  Opérations de chaîne C# – réduit la pression du garbage collection

Opérations de chaîne C# – réduit la pression du garbage collection

黄舟
黄舟original
2017-02-13 11:59:031586parcourir

Détails de l'optimisation des performances C#

1 Utilisez string.Empty pour attribuer une valeur initiale à une variable de chaîne vide

.

  • String.Empty est une référence, et "" est l'implémentation spécifique

    string filter=“”;//不建议
     
    string filter=string.Empty; //建议

2. Utilisez str.Length == 0 pour comparer les chaînes vides


  • La méthode la plus rapide : if (str .Length == 0)

  • Deuxième : if (str == String.Empty) ou if (str == "")


3. Évitez les opérations ToUpper et ToLower inutiles

  • Des méthodes telles que ToUpper et ToLower régénéreront les paires de chaînes

  • String.Compare peut ignorer la casse des chaînes

    //不推荐的写法
    if(s1.ToUpper()==s2.ToUpper()) …;
    //推荐的写法
    if(String.Compare( s1, s2, true ) == 0) …;

4. Utilisez StringBuilder habilement pour effectuer des opérations d'épissage de chaînes


  • Si vous souhaitez construire une chaîne plus longue, en particulier lors d'épissages plus de 10 fois (valeur d'expérience), vous devez utiliser StringBuilder pour les opérations d'épissage de chaînes.

    [object Object]

5. Lors de la création d'un StringBuilder, la taille initiale doit être spécifiée


  • La taille initiale par défaut est de 16. Une fois dépassée, il faudra la redimensionner et augmenter la pression du GC. Il est recommandé de lui donner une taille initiale basée sur des valeurs empiriques.

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 10; i++)
    {
       sb.Append(i);
    }
    string s = sb.ToString();
    //建议修改为
    StringBuilder sb = new StringBuilder(256);
    for (int i = 0; i < 10; i++)
    {
       sb.Append(i);
    }
    string s = sb.ToString();


6. Évitez d'abuser de StringBuilder


  • Les opérations de concaténation de chaînes similaires à str1 str2 str3 str4 seront compilées dans String.Concat(str1, str2, str3, str4), qui est plus efficace que StringBuilder. String.Concat déterminera la longueur de la chaîne en une seule fois et StringBuilder doit effectuer Resize, ce qui convient pour générer plusieurs fois des objets chaîne.


7. Initialisez StringBuilder en définissant directement .Length=0


  • Selon les résultats expérimentaux, lorsque vous utilisez plusieurs fois le même objet StringBuilder, l'initialisation est la plus rapide en définissant directement .Length=0.

    StringBuiler sb = new StringBuilder(256);
      ......
    sb.Remove(0, sb.Length); //不建议
    sb.Length = 0; //建议


8. N'utilisez pas .Length=0 pour libérer la mémoire occupée par StringBuilder

static void test()
{
    StringBuilder sb = new StringBuilder(256);
    for (int i = 0; i < 100; i++)
    {
        sb.Append(i);
    }
    string t = sb.ToString();
    ……//其他不使用变量sb的代码段
    sb.Length = 0; //去掉该句手工清空sb代码,会更早释放内存
}


À suivre


Ce qui précède est le contenu de l'opération de chaîne C# - réduisant la pression du garbage collection. Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (www.php.cn). )!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn