Я прочитал статью о производительности строковых методов "a" + b
в сравнении с string.Format ("a {1}", b) и решил сделать тест.Оцените использование памяти в .NET (VS)
Есть мой код в приложении WinForms (VS 2005, но заинтересован в обоих 2005/2008).
private void button1_Click(object sender, EventArgs e)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < 10000; i++)
{
Console.Write("1" + 2 + "3" + 4 + "5");
}
stopwatch.Stop();
Console.WriteLine("**********");
Console.WriteLine("'A'+'B'+'C'... 10 000 elapsed: {0}",
stopwatch.Elapsed.ToString());
Console.WriteLine("**********");
stopwatch.Reset();
stopwatch.Start();
for (int i = 0; i < 10000; i++)
{
Console.Write(string.Format("1{0}3{1}5", 2, 4));
}
stopwatch.Stop();
Console.WriteLine("**********");
Console.WriteLine("string.Format((A)B(C)...) 10 000 elapsed: {0}",
stopwatch.Elapsed.ToString());
Console.WriteLine("**********");
}
на моей машине вывод состоит в следующем:
12345123451234512345123451234512345123451234512345123451 ...
'A' + 'B' + 'C' ... 10 000 истекшее: 00 : 00: 0 9,4217880
1234512345123451234512 3451234512345123451234512345123451 ...
String.Format ((А) В (С) ...) 10 000 истекшее: 00: 00: 0 9,8507060
Таким образом, время почти тоже самое.
Теперь я задаюсь вопросом, сколько памяти я использовал. Есть ли способ сравнить использование памяти и работу GarbageCollector?
Я загрузил пробную версию .NET Memory Profiler ... но, возможно, существует более простой (как, например, выше) способ обнаружения потраченной памяти на обеих итерациях?
Спасибо.
Вы действительно должны устранить Console.Write в тестовом цикле. Вывод относительно медленный, и, скорее всего, там есть бутылочная шейка, а не при формировании струны, где вы хотите. – jdmichal
Просто, чтобы поддержать это, время для второго на моей машине. С выходом: 0.5482043s. Без вывода: 0.0098585s. – jdmichal