Ako zlepšiť reťazec zreťazenie výkon v Visual C#

Preklady článku Preklady článku
ID článku: 306822 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

V tomto článku vám ukáže výhody použitia StringBuilder Trieda nad tradičné zreťazenie techniky. Struny v.NET Framework sú invariantné (to sa odkazovaný text je iba na čítanie po počiatočné rozdelenie). To poskytuje mnoho výkonnostné výhody a predstavuje niektoré výzvy pre developera, ktorý je zvyknutý C/c ++ reťazec manipulácia techniky.

Popis struny v.NET Framework

Jednou z techník na zlepšenie reťazec zreťazenie nad strcat() v Visual C/c ++ je prideliť veľký znak pole ako medzipamäť a kópia reťazec údajov do medzipamäte. V.NET Framework, reťazec je nemenná; nemožno ho modifikovať na mieste. C# + Zlučovací operátor stavia nový reťazec a spôsobuje redukciu výkon pri zřetězuje veľké množstvo textu.

Však.NET Framework zahŕňa StringBuilder trieda, ktorá je optimalizovaná na reťazec zreťazenia. Poskytuje rovnaké výhody ako pomocou znaku array v C/c ++, ako aj automaticky pestovanie veľkosť medzipamäte (ak potrebné) a sledovanie dĺžky pre vás. Ukážková aplikácia v tomto článku demonštruje použitie StringBuilder Trieda a porovnáva výkon, ktorý zreťazenia.

Vybudovať a spustiť aplikáciu demonštračné

  1. Spustiť Visual Studio a potom vytvorte novú aplikáciu Visual C# konzoly.
  2. Nasledujúci kód používa += Zlučovací operátor a StringBuilder Trieda priebežne 5000 zreťazenia 30 znakov každého. Pridať tento kód do hlavného postupu.
    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žiť žiadosť. Stlačením klávesu F5 zostaviť a potom spustiť aplikáciu. Okná konzoly by zobraziť výstup podobný nasledujúcemu:
    Zreťazenie trvalo 6.208928 sekúnd.
    Reťazec Builder vzal 0 sekúnd.

    Stlačením klávesu ENTER dokončiť...
  4. Stlačením klávesu ENTER zastaviť beh aplikácie a zatvorte okno konzoly.

Riešenie problémov

  • Ak ste v prostredí, ktoré podporuje streamovanie údajov, napríklad v ASPX webového formulára alebo vaša aplikácia je písanie údajov na disk, zvážte vyhnúť medzipamäte réžiu zreťazenie alebo StringBuilder, a zapisovať údaje priamo do prúdu cez Response.write metóda alebo vhodný spôsob pre sa prúd.
  • Skúste znova použiť existujúce StringBuilder Trieda skôr ako prerozdeliť zakaždým, keď budete potrebovať jednu. To obmedzuje rastu haldy a znižuje odpadky zberu. V oboch prípadoch pomocou StringBuilder Trieda využíva efektívnejšie haldy než pomocou + prevádzkovateľ.

ODKAZY

V StringBuilder trieda obsahuje mnohé iné metódy pre manipuláciu reťazec na mieste, ktoré nie sú opísané v tomto článku. Pre viac informácií, vyhľadajte "StringBuilder" v Online Pomocníkovi.

Vlastnosti

ID článku: 306822 - Posledná kontrola: 31. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Kľúčové slová: 
kbsweptvs2008 kbhowtomaster kbperformance kbmt KB306822 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:306822

Odošlite odozvu

 

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