SORU
10 Kasım 2009, Salı


en iyi şekilde içeriğini temizlemek için .NET'In StringBuilder

Bir StringBuilder yeniden kullanım için en iyi yoldur (daha az / daha az kaynak tüketir sürer) içeriğini temizlemek için ne düşündüğünü sormak istiyorum. Aşağıdaki senaryoyu düşünün:

StringBuilder sb = new StringBuilder();
foreach(var whatever in whateverlist)
{
  sb.Append("{0}", whatever);
}

//Perform some stuff with sb

//Clear stringbuilder here

//Populate stringbuilder again to perform more actions
foreach(var whatever2 in whateverlist2)
{
  sb.Append("{0}", whatever2);
}

Ve StringBuilder takas ne zaman iki ihtimal düşünebiliyorum:

sb = new StringBuilder();

ya

sb.Length = 0;

Bunu temizlemek için en iyi yoldur ve neden nedir?

Teşekkür ederim.

EDİT: akım ile ben bir sorun var .NET 3.5 sürümü.

CEVAP
10 Kasım 2009, Salı


Bu yaptığın .NET 2.0 veya 3.5, bunu yapmak için bir uzantı yöntemi yazma bu gibi:

/// <summary>
///     Clears the contents of the string builder.
/// </summary>
/// <param name="value">
///     The <see cref="StringBuilder"/> to clear.
/// </param>
public static void Clear(this StringBuilder value)
{
    value.Length = 0;
    value.Capacity = 0;
}

Öyleyse, bu gibi temizlemek:

someStringBuilder.Clear();

4.0 çıktığında, 4.0 sürümü lehine uzatma yöntemi bir kenara atarsın.

GÜNCELLEMEMuhtemelen Kapasitesi sıfıra ayarlamak için iyi bir fikir değil. Eğer aynı örnek kullanıyorsanız size builder eklemek için adetle sınırla garanti eder. Ancak, oluşturucu örneğini bellekte çok küçük bir değer (1) olarak Kapasitesini ayarlamak kadar serbest bırakılmaz. Kapasite özelliğinin varsayılan değeri 16'dır. 16 veya daha az verimli olsa da () iki kat fazla kapasite ayarı kullanarak düşünebilirsiniz:

  • 1 veya sıfır belleği temizlemek için ayarlayın
  • Orijinal Kapasite değeri 16 farklı olabilir) için geri yüklemek için ayarlayın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CommonArtisan

    CommonArtisa

    7 Temmuz 2012
  • Skrillex

    Skrillex

    6 NİSAN 2010
  • wwjoshdu

    wwjoshdu

    18 ŞUBAT 2011