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

标签 c#

如果我使用以下内容,我将确定多少性能损失:

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/

相关文章:

c# - JsonSerializerSettings 线程安全吗?

c# - 禁用默认按钮或在 asp.net c# 中输入 key

c# - 在 Startup - Asp.Net Core 中调用 AddTransient 中的异步方法

c# - NHibernate 树结构更新根问题

c# - 如何使排序列表反向排序?我必须自定义 IComparer 吗?

c# - 关于 C#'s ` List<>.ToString 的问题

c# - ASP.NET 自动生成 aspx.designer.cs 关闭?

c# - 从 IDesignTimeDbContextFactory<T> 访问 App.config

c# - Assembly.LoadFrom - 使用证据重载来验证强名称签名

c# - 如何测量页面时间负载?