Dize birleştirme Visual C# içinde performansı nasıl artırılır

Makale çevirileri Makale çevirileri
Makale numarası: 306822 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu adım adım makalede, geleneksel bir birleştirme teknikleri StringBuilder sınıfı kullanmanın faydaları gösterir. .NET Framework'de sabit dizeleridir (yani, başvurulan metin sonra ilk tahsisat salt okunur durumdadır). Bu işlem, pek çok performans kazançları sunar ve C/C++ dize işleme teknikler için adresini olan geliştiriciler için bazı zorlukları oluşturur.

Dizeler, .NET Framework'ün açıklaması

Dize birleştirme strcat(), Visual C/C++ üzerinden artırmanın tek bir büyük bir karakter dizisi bir arabellek ve kopya dize veri arabellek ayırmak üzere tekniğidir. .NET Framework, dize sabit; yerde değiştirilemez. C# + da birleşik bağ kümeleri işleci, yeni bir dize oluşturur ve, çok miktarda metin birleştirir, nedenler, performans sınırlı.

.NET Framework, ancak dize birleşik bağ kümeleri için en iyi duruma getirilmiş bir StringBuilder sınıfı bulunur. Bu, C/C++ içinde bir karakter dizisi kullanarak yanı sıra uzunluğu, izleme ve arabellek boyutu, (gerekirse) otomatik olarak büyüyen aynı yararı sağlar. Bu makaledeki örnek uygulama StringBuilder sınıfı kullanımını gösterir ve birleştirme için performans karşılaştırır.

Olu?turmak ve bir tanıtım uygulama Çalıştır

  1. Visual Studio'yu başlatın ve sonra yeni bir Visual C# konsol uygulaması oluşturun.
  2. Aşağıdaki kod, 5.000 concatenations 30 karakter her zaman += birleştirme işleci ve StringBuilder sınıfını kullanır. Bu kod, ana yordama ekleyin.
    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. Uygulama kaydedin. Derleme ve sonra da uygulamayı çalıştırmak için F5 tuşuna basın. Konsol pencereleri, aşağıdakine benzer bir çıktı görüntülenmelidir:
    Birleştirme 6.208928 saniye sürdü.
    Dize Oluşturucusu 0 saniye sürdü.

    Bitirmek için ENTER tuşuna basın...
  4. Uygulama çalışmıyor ve konsol penceresi kapatmak için ENTER'E basın.

SORUN GİDERME

  • Veri akışı destekleyen bir ortam varsa, gibi ASPX Web Form oluşturma veya uygulama verileri, disk birleştirme veya StringBuilder arabelleği yükü önleme dikkate almanız için yazma ve verileri, doğrudan akış için Response.Write yöntemini veya söz konusu akış için uygun yöntemi yazın.
  • Varolan StringBuilder sınıfı yeniden yerine bir gereksinim duyduğunuz her zaman tahsis deneyin. Bu öbek, büyüme sınırlar ve çöp toplama azaltır. Her iki durumda da, kullanımına kıyasla daha verimli kullanılmasını sağlayan öbek StringBuilder sınıfını kullanarak yapar +.

Referanslar

StringBuilder sınıfı, bu makalede açıklanan pek çok diğer yöntemler için yerinde dize işleme içerir. Daha fazla bilgi için çevrimiçi Yardım içindeki "StringBuilder" arayın.

Özellikler

Makale numarası: 306822 - Last Review: 14 Temmuz 2008 Pazartesi - Gözden geçirme: 3.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Anahtar Kelimeler: 
kbmt kbsweptvs2008 kbhowtomaster kbperformance KB306822 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:306822

Geri Bildirim Ver

 

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