SORU
29 HAZİRAN 2011, ÇARŞAMBA


String.() Değiştirmek vs StringBuilder.()Değiştirin

Bir sözlük değerlerle işaretleri yerine bir dize var. Mümkün olduğunca verimli olması gerekiyor. Bir dize ile bir döngü yapmak.yerine sadece bellek (dize değişmez, unutmayın) tüketiyor. StringBuilder.() Yerine bu dize manipülasyonlar ile çalışmak üzere tasarlanmıştır beri? daha iyi olacak

Düzenli pahasına önlemek için umuyordum, ama eğer bir daha verimli olacaksa öyle olsun.

Not: kod karmaşıklığı hakkında umurumda değil, sadece çalışır ve nasıl tükettiği bellek.

Ortalama istatistikler: uzunluğu 255-1024 karakterler, 15-30 sözlükte anahtarları.

CEVAP
29 HAZİRAN 2011, ÇARŞAMBA


RedGate kullanarak aşağıdaki kodu kullanarak Profiler

class Program
    {
        static string data = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
        static Dictionary<string, string> values;

        static void Main(string[] args)
        {
            Console.WriteLine("Data length: "   data.Length);
            values = new Dictionary<string, string>()
            {
                { "ab", "aa" },
                { "jk", "jj" },
                { "lm", "ll" },
                { "yz", "zz" },
                { "ef", "ff" },
                { "st", "uu" },
                { "op", "pp" },
                { "x", "y" }
            };

            StringReplace(data);
            StringBuilderReplace1(data);
            StringBuilderReplace2(new StringBuilder(data, data.Length * 2));

            Console.ReadKey();
        }

        private static void StringReplace(string data)
        {
            foreach(string k in values.Keys)
            {
                data = data.Replace(k, values[k]);
            }
        }

        private static void StringBuilderReplace1(string data)
        {
            StringBuilder sb = new StringBuilder(data, data.Length * 2);
            foreach (string k in values.Keys)
            {
                sb.Replace(k, values[k]);
            }
        }

        private static void StringBuilderReplace2(StringBuilder data)
        {
            foreach (string k in values.Keys)
            {
                data.Replace(k, values[k]);
            }
        }
    }
  • String.= 5.843 ms değiştirin
  • StringBuilder.#1 = 4.059 ms değiştirin
  • Stringbuilder.#2 = 0.461 ms değiştirin

Dize uzunluğu = 1456

#1 #2 değil öyle olsa yöntemi oluşturur stringbuilder stringbuilder performans farkı yöntemi işe aynı hareket olduğuna göre büyük ihtimalle sona erecek. Eğer ile başlar eğer bir string yerine stringbuilder sonra #2 yerine gitmek için yolu olabilir.

Bildiğim kadarıyla bellek gibi, RedGateMemory profiler kullanarak, stringbuilder genel kazanacağını içine BİRÇOK yerini işlemleri elde edene kadar endişelenecek bir şey yok.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 8lacKy

    8lacKy

    30 Mart 2009
  • Lupe Fiasco

    Lupe Fiasco

    23 ŞUBAT 2006
  • tychoadragmire

    tychoadragmi

    20 Mart 2006