Convert.ToString(...)或Object.ToString()哪个性能更好?(涉及IT技术)

4
假设我有一个循环,将要把一个包含1000万个int元素的ArrayList转换成一个字符串数组。我应该使用Convert.ToString(...)还是Object.ToString()?在这种情况下,使用Convert.ToString(...)会取消装箱元素并降低性能吗?

3
如果它们在一个ArrayList中,它们已经被装箱了。 - Lee
Profiler的结果显示了什么? - Michael Stum
是的,但有趣的是Object.ToString()是一个虚方法,将被解析为int.ToString(),因此没有拆箱。但我不确定Convert.ToString()会发生什么。 - DeveloperInToronto
刚刚测试了一下,在我的Corei5 750 2.66 GHz上,当ArrayList包含1000万个元素时,Object.ToString()需要大约1.23秒,而Convert.ToString(...)则需要大约1.36秒。 - DeveloperInToronto
实际上并没有什么区别。Convert.ToString()会接受一个对象(除非你强制转换它),而Object.ToString()则做出显而易见的事情。我认为1/10秒根本不算什么。如果你远离可怕的ArrayList,很可能会看到巨大的改善。当你使用VS2010并且可以使用GENERICS时,为什么还要使用ArrayList让我感到担忧。 - Security Hound
是的,我总是使用List<int>。使用ArrayList会很疯狂!就这个例子而言,我只是想理解ToString()和Convert.ToString(...)的行为。 - DeveloperInToronto
1个回答

10
如果你使用的是 ArrayList,任何值类型都已经被装箱了。为什么不使用 List<int> 呢?后者可以避免装箱带来的执行时间成本,也可以避免占用大量空间。
转换为使用 List<int> 后,我建议直接调用 ToString 方法。在我的看法中,它更简单地表达了你想要做的事情,并提供了更多的格式化选项。

1
是的,我总是使用List<int>。使用ArrayList会很疯狂!对于这个特定的例子,我只是想了解ToString()和Convert.ToString(...)的行为。 - DeveloperInToronto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接