Heim  >  Artikel  >  Backend-Entwicklung  >  C#-String-Operationen – reduzieren den Druck der Garbage Collection

C#-String-Operationen – reduzieren den Druck der Garbage Collection

黄舟
黄舟Original
2017-02-13 11:59:031586Durchsuche

Details zur C#-Leistungsoptimierung

1. Verwenden Sie string.Empty, um einer leeren Zeichenfolgenvariablen einen Anfangswert zuzuweisen


  • String.Empty ist eine Referenz und „“ ist die spezifische Implementierung

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

2. Verwenden Sie str.Length == 0, um leere Zeichenfolgen zu vergleichen


  • Die schnellste Methode: if (str .Length == 0)

  • Zweitens: if (str == String.Empty) oder if (str == "")


3. Vermeiden Sie unnötige String-ToUpper- und ToLower-Operationen

  • Methoden wie ToUpper und ToLower regenerieren String-Paare


  • String.Compare kann String-Groß-/Kleinschreibung ignorieren

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

4. Verwenden Sie StringBuilder geschickt, um String-Spleißoperationen durchzuführen


  • Wenn Sie einen längeren String konstruieren möchten, Insbesondere wenn mehr als zehnmal gespleißt wird (Erfahrungswert), sollten Sie StringBuilder für String-Spleißvorgänge verwenden.

    [object Object]

5. Beim Erstellen eines StringBuilders sollte die Anfangsgröße angegeben werden


  • Die standardmäßige Anfangsgröße beträgt 16. Sobald diese überschritten wird, muss die Größe geändert und der GC-Druck erhöht werden. Es empfiehlt sich, ihm eine Ausgangsgröße zu geben, die auf Erfahrungswerten basiert.

    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. Vermeiden Sie den Missbrauch von StringBuilder


  • String-Verkettungsoperationen wie str1+str2+str3+str4 werden in String.Concat(str1, str2, str3, str4) kompiliert, was effizienter als StringBuilder ist. String.Concat ermittelt die Zeichenfolgenlänge auf einmal, und StringBuilder muss eine Größenänderung durchführen, die zum mehrmaligen Generieren von Zeichenfolgenobjekten geeignet ist.


7. StringBuilder durch direktes Setzen von .Length=0

initialisieren


  • Den experimentellen Ergebnissen zufolge ist die Initialisierung bei mehrmaliger Verwendung desselben StringBuilder-Objekts am schnellsten, wenn .Length=0 direkt festgelegt wird.

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


8. Verwenden Sie .Length=0 nicht, um den von StringBuilder belegten Speicher freizugeben

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代码,会更早释放内存
}


Fortsetzung folgt


Das Obige ist der Inhalt der C#-String-Operation – Reduzierung des Drucks der Garbage Collection. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn). )!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn