性能命中int +""而不是使用int.ToString()

The*_*iot 1 c#

如果我使用以下内容,我将获得多少性能?

int i=5;
label1.Text = i + "";
Run Code Online (Sandbox Code Playgroud)

代替:

int i=5;
label1.Text = i.ToString();
Run Code Online (Sandbox Code Playgroud)

Bri*_*sen 11

虽然两者之间的性能可能存在差异,但请问自己这个问题:这对于应用程序的性能是否重要?

我的猜测是,它不会很重要.

测量它并修复它.

架构通常会影响性能.次要语言优化可能会影响性能,但总的来说,您可以更好地花时间来解决通过实际测量确定的瓶颈问题.


Guf*_*ffa 11

第一种方法在进程中创建一个额外的对象,因为它创建了一个对象来装入整数.编译器生成以下代码:

label1.Text = String.Concat((object)i, (object)String.Empty);
Run Code Online (Sandbox Code Playgroud)

Concat方法将ToString在两个参数上调用该方法以获取其字符串值,这有效地将整数解包,然后将其转换为字符串.它会通过连接字符串来创建另一个额外的对象,但它有代码来捕获其中一个字符串为空的特殊情况,因此它只返回整数的字符串值.

第二种方法最终完全按照它所说的做.

你应该避免使用第一种方法,主要是因为它表现得更差,但是因为它隐藏了你真正想做的事情.

只要不在紧密循环中执行此操作,性能差异就会很小(我测量的速度差异为5-10%).创建的额外对象是短暂的,因此很可能会在下一个垃圾收集中收集.但是,没有理由使用第一种方法,因为第二种方法存在并且完全符合您的要求,而不是将其作为隐藏的副作用.

编辑:

另请注意,第一种方法应该是编写i + String.Empty而不是i + "",因此它的输入次数甚至不如第二种方法.