对于object的ToString()的调用,平时没有怎么注意,认为可有可无。实际上这个里面对性能有很大的影响,具体怎么样,看下面的例子就可以很清楚的知道了。
object obj1 = "test";
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 1000000; i++)
...{
string t = Convert.ToString(obj1);
}
watch.Stop();
Console.WriteLine("1000000 times object: " + watch.ElapsedMilliseconds + "ms");
object obj2 = "test";
Stopwatch watch1 = new Stopwatch();
watch1.Start();
for (int i = 0; i < 1000000; i++)
...{
string t = Convert.ToString(obj2.ToString());
}
watch1.Stop();
Console.WriteLine("1000000 times string: " + watch1.ElapsedMilliseconds + "ms");
Console.ReadLine();运行结果如下:
1000000 times object: 37ms
1000000 times string: 11ms
对于上面的差别,我想应该是在装箱的过程中,有性能损失。具体的原因,可以从中间代码来看,好好的研究下。
通过对比两种不同方式调用对象的ToString方法,分析了在进行大量转换操作时的性能差异,并推测这种差异可能源于装箱过程中的性能损耗。
722

被折叠的 条评论
为什么被折叠?



