如果我使用以下内容,我将获得多少性能?
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 + "",因此它的输入次数甚至不如第二种方法.
| 归档时间: |
|
| 查看次数: |
522 次 |
| 最近记录: |