【发布时间】:2009-12-19 02:25:57
【问题描述】:
我阅读了一篇关于字符串方法 "a" + b 与 string.Format("a{1}", b) 的性能的文章,并决定进行测试。
在 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
12345123451234512345123451234512345123451234512345123451...
string.Format((A)B(C)...) 10 000 已过:00:00:0 9.8507060
所以,时间几乎是一样的。
现在,我想知道我用了多少内存。有没有办法比较内存使用情况和 GarbageCollector 的工作?
我下载了一个试用版 .NET Memory Profiler...但也许有一种更简单(如上面的代码)的方法来检测两次迭代中消耗的内存?
谢谢。
【问题讨论】:
-
您应该真正消除测试循环中的 Console.Write。输出速度相对较慢,而且很可能会出现瓶颈,而不是在字符串形成时出现瓶颈。
-
只是为了备份它,我的机器上的第二个时间。带输出:0.5482043s。无输出:0.0098585s。
标签: .net visual-studio performance