Gruparea șirurilor se referă la două tipuri de optimizări ale compilatorului legate de șiruri :
Când procesează codul sursă , compilatorul trebuie să plaseze fiecare șir literal în metadatele modulului gestionat. Dacă o singură linie apare de multe ori în codul sursă, plasarea tuturor acestor linii în metadate va duce la creșterea fișierului rezultat.
Pentru a preveni creșterea codului, multe compilatoare (inclusiv compilatorul C# ) stochează doar o singură instanță a unui șir literal în metadatele modulului. Compilatorul înlocuiește toate referințele la acest șir din codul sursă cu referințe la instanța sa din metadate. Acest lucru reduce semnificativ dimensiunea modulului. Metoda nu este nouă - acest mecanism există de mult timp în compilatoarele C / C++ . În compilatorul Microsoft C/C++, acest lucru se numește grupare de șiruri. Acesta este un alt instrument care vă permite să accelerați procesarea șirurilor.
De obicei, un șir este un obiect mare care necesită un bloc mare de memorie pentru funcționarea sa . Această optimizare alocă memorie pentru șiruri numai atunci când este necesar, permițând mai multor variabile să indice același șir de caractere. Numai dacă una dintre variabile își schimbă conținutul, șirul este copiat.
O optimizare similară există în limbajele colectate de gunoi sub forma în care un șir este un obiect imuabil, iar atribuirea a=bnu creează un șir nou. Dezavantajul acestei soluții este că programatorul trebuie să cunoască și să folosească un mecanism intern de construcție a șirurilor de caractere precum StringBuilder( Java ).