DetailPage-MSS-KB

Knowledge Base

Artikel ID: 306822 - Laatste beoordeling: maandag 28 februari 2011 - Wijziging: 2.0

 

Op deze pagina

Samenvatting

In dit artikel ziet u de voordelen van deStringBuilderklasse via traditionele aaneenschakelings technieken. Teken reeksen het.NET Framework invariant zijn (dat wil zeggen de tekst waarnaar wordt verwezen is alleen-lezen na de eerste toewijzing). Dit biedt vele prestatievoordelen en sommige uitdagingen vormt voor de ontwikkelaar die gewend zijn aan C/C++ teken reeks manipulatie technieken.

Beschrijving van teken reeksen in het..NET Framework

Een techniek te verbeteren aaneenschakelen van teken reeksenstrcat()in Visual C/C++ is een grote teken matrix toewijzen als een teken reeks gegevens kopiëren en in een buffer in de buffer. In het..NET Framework, een teken reeks is onveranderbaar zijn; het kan niet worden gewijzigd in plaats. De c#- + aaneenschakelings operator bouwt een nieuwe reeks en oorzaken verminderde prestaties wanneer er grote hoeveelheden tekst worden aaneengeschakeld.

Echter, de.NET Framework bevat eenStringBuilderklasse die is geoptimaliseerd voor het aaneenschakelen van teken reeksen. Biedt dezelfde voordelen als met een teken reeks in C/C++ evenals groeiende automatisch de grootte van de buffer (indien nodig) en bij houden van de lengte voor u. De voorbeeldtoepassing in dit artikel wordt het gebruik van deStringBuilderklasse en vergelijkt u de prestaties wilt samenvoegen.

Ontwikkelen en uitvoeren van een toepassing demonstratie

  1. Start Visual Studio en maak een nieuw Visual c# Console toepassing.
  2. De volgende code gebruikt de aaneenschakelings operator + = enStringBuilderklasse tijd 5000 koppelingen van 30 tekens elk. Deze code toevoegen aan de hoofd procedure.
    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. Sla de toepassing. Druk op F5 om te compileren en de toepassing wordt uitgevoerd. Consolevensters moeten worden weer gegeven als de volgende uitvoer:
    Aaneenschakelings vond 6.208928 seconden.
    Teken reeks Builder nam 0 seconden.

    Druk op ENTER om het te voltooien...
  4. Druk op ENTER om te stoppen met het uitvoeren van de toepassing en het consolevenster te sluiten.

Problemen oplossen

  • Als u in een omgeving die ondersteuning biedt voor streaming gegevens, zoals in een ASPX-Web formulier of de toepassing de gegevens naar schijf schrijft zich beter vermijden de buffer overhead van samenvoeging of deStringBuilder, en schrijft de gegevens rechtstreeks naar de stroom via deResponse. Writede methode of de juiste methode voor de stream in kwestie.
  • Probeer het opnieuw gebruiken van de bestaandeStringBuilderklasse in plaats van telkens wanneer u een nieuwe toewijzing. Dit beperkt de groei van de heap en garbagecollection vermindert. In beide gevallen met deStringBuilderklasse maakt efficiënter gebruik van de heap dan met de operator +.

Referenties

HetStringBuilderde klasse bevat veel andere methoden voor het manipuleren van teken reeks in plaats die niet in dit artikel worden beschreven. Zoeken naar "StringBuilder' in de on line Help voor meer informatie.


De informatie in dit artikel is van toepassing op:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Trefwoorden: 
kbsweptvs2008 kbhowtomaster kbperformance kbmt KB306822 KbMtnl
Machine-translated ArticleMachine-translated Article
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:306822  (http://support.microsoft.com/kb/306822/en-us/ )
Delen
Extra ondersteuningsopties
Microsoft Community Support-forums
Neem rechtstreeks contact met ons op
Een door Microsoft gecertificeerde partner zoeken
Microsoft Store