Jak zvýšit výkon zřetězení řetězce v jazyce Visual C#

Překlady článku Překlady článku
ID článku: 306822 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek ukazuje výhody použití třídy StringBuilder přes tradiční zřetězení techniky. Řetězce v rozhraní .NET Framework jsou invariantu (tj odkazovaný text je jen pro čtení po počáteční přidělení). To poskytuje mnoho výhod výkonu a vydává některé výzev vývojáře, kteří je zvyklí techniky manipulaci s řetězci C/C++.

Popis řetězce .NET Framework

Jeden technika zlepšit řetězení řetězců přes strcat() v Visual C/C++ je pole velký znak přidělit jako vyrovnávací paměti a kopie řetězec dat do vyrovnávací paměti. V rozhraní .NET Framework je neměnná řetězec; změněn na místě. S C# + zřetězení operátor vytvoří nový řetězec a příčiny snížen výkon při zřetězí velké množství textu.

.NET Framework však obsahuje StringBuilder třídy, která je optimalizována pro řetězení řetězců. Poskytuje stejné výhody jako pomocí pole znaků v C/C++, stejně jako automaticky zvětšuje velikost vyrovnávací paměti (v případě potřeby) a sledování délka. Ukázková aplikace v tomto článku znázorňuje použití třídy StringBuilder a porovnává výkonu k zřetězení.

Sestavit a spustit aplikace ukázka

  1. Spusťte aplikaci Visual Studio a vytvořit novou aplikaci Visual C# konzoly.
  2. Následující kód používá operátor zřetězení += a třída StringBuilder k času 5 000 zřetězení 30 znaků. Přidat tento kód hlavní procedury.
    const int sLen=30, Loops=5000;
    DateTime sTime, eTime;
    int i;
    string sSource = new String('X', sLen);
    string sDest = "";
    // 
    // Time string concatenation.
    // 
    sTime = DateTime.Now;
    for(i=0;i<Loops;i++) sDest += sSource;
    eTime = DateTime.Now;
    Console.WriteLine("Concatenation took " + (eTime - sTime).TotalSeconds + " seconds.");
    // 
    // Time StringBuilder.
    // 
    sTime = DateTime.Now;
    System.Text.StringBuilder sb = new System.Text.StringBuilder((int)(sLen * Loops * 1.1));
    for(i=0;i<Loops;i++) sb.Append(sSource);
    sDest = sb.ToString();
    eTime = DateTime.Now;
    Console.WriteLine("String Builder took " + (eTime - sTime).TotalSeconds + " seconds.");
    // 
    // Make the console window stay open
    // so that you can see the results when running from the IDE.
    // 
    Console.WriteLine();
    Console.Write("Press Enter to finish ... ");
    Console.Read();
    					
  3. Uložit aplikace. Stisknutím klávesy F5 kompilace a spuštění aplikace. Okna konzoly měli zobrazit výstup podobný následujícímu:
    Zřetězení trval 6.208928 sekund.
    Řetězec Tvůrce trvala 0 sekund.

    Stisknutím klávesy ENTER dokončit...
  4. Stiskněte klávesu ENTER, zastavení, spuštění aplikace a zavřete okno konzoly.

Odstraňování potíží

  • Pokud jsou v prostředí, které podporuje datové proudy dat, například v webový formulář ASPX nebo aplikace zapisuje data na disk, zvažte předcházení režii vyrovnávací paměti zřetězení nebo StringBuilder a zapisovat data do proudu prostřednictvím metodu Response.Write nebo odpovídající metodu dotyčný datového proudu.
  • Zkuste znovu použít existující třída StringBuilder než přerozdělit každém potřebujete jednu. To omezuje růstu haldy a snižuje úklid. V obou případech pomocí třídy StringBuilder umožňuje efektivnější využití haldy než použití operátoru +.

Odkazy

Třída StringBuilder obsahuje mnoho jiných metod pro manipulaci s řetězec v místě, které nejsou popsány v tomto článku. Další informace hledat "StringBuilder" v online nápovědě.

Vlastnosti

ID článku: 306822 - Poslední aktualizace: 14. července 2008 - Revize: 3.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Klíčová slova: 
kbmt kbsweptvs2008 kbhowtomaster kbperformance KB306822 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:306822

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com