如果我使用以下内容,我将确定多少性能损失:
int i=5;
label1.Text = i + "";
代替:
int i=5;
label1.Text = i.ToString();
最佳答案
第一个方法在过程中创建了一个额外的对象,因为它创建了一个对象来装箱整数。编译器生成此代码:
label1.Text = String.Concat((object)i, (object)String.Empty);
Concat
方法将对两个参数调用 ToString
方法以获取它们的字符串值,这会在将整数转换为字符串之前有效地拆箱。它会通过连接字符串创建另一个额外的对象,但它有代码来捕捉其中一个字符串为空的特殊情况,因此它只返回整数的字符串值。
第二种方法最终完全按照它说的去做。
你应该避免第一种方法,主要不是因为它性能更差,而是因为它隐藏了你真正想做的事情。
只要您不在紧密循环中执行此操作,性能差异就会很小(我测得速度差异为 5-10%)。创建的额外对象是短暂的,因此它很可能会在下一次垃圾回收中被回收。但是,没有理由使用第一种方法,因为第二种方法存在并且可以完全满足您的需求,而不是将其作为隐藏的副作用。
编辑:
还要注意,第一种方法应该写成i + String.Empty
,而不是i + ""
,所以不比第二种方法少打字。
关于c# - int + ""的性能命中而不是使用 int.ToString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3606249/