C# 中的字符串内插 $对比string.Format

C# 10.0 对字符串插值做了点提升,支持开发人员对字符串进行花式内插。

附官方教程:

https://docs.microsoft.com/zh-cn/dotnet/csharp/tutorials/string-interpolation#code-try-0icon-default.png?t=M276https://docs.microsoft.com/zh-cn/dotnet/csharp/tutorials/string-interpolation#code-try-0对比一下string.Format的方式,我想看下层层包装之后,性能上的差别。

先说下我机器的配置:

 

#region 测试代码
var a = 3;
var b = 2;
var list = new List<int>();
Console.WriteLine("strat method one");
for (int j = 0; j < 10; j++)
{
    var dt1 = DateTime.Now;
    //Console.WriteLine(dt1.ToString("HH:mm ffff"));
    for (int i = 0; i < 1_0000_0000; i++)
    {
        var c = $"{a} + {b} = {a + b}";
    }
    var dt2 = DateTime.Now;
    //Console.WriteLine(dt2.ToString("HH:mm ffff"));
    Console.WriteLine("times " + j + " : " + (dt2 - dt1).Milliseconds);
    list.Add((dt2 - dt1).Milliseconds);
}
list.Remove(list.Max());
list.Remove(list.Min());
Console.WriteLine(list.Average());

list.Clear();
Console.WriteLine("strat method two");
for (int j = 0; j < 10; j++)
{
    var dt1 = DateTime.Now;
    //Console.WriteLine(dt1.ToString("HH:mm ffff"));
    for (int i = 0; i < 1_0000_0000; i++)
    {
        var c = string.Format("{0} + {1} = {2}", a, b, a + b);
    }
    var dt2 = DateTime.Now;
    //Console.WriteLine(dt2.ToString("HH:mm ffff"));
    Console.WriteLine("times " + j + " : " + (dt2 - dt1).Milliseconds);
    list.Add((dt2 - dt1).Milliseconds);
}
list.Remove(list.Max());
list.Remove(list.Min());
Console.WriteLine(list.Average()); 
#endregion

输出结果:

 结论:从测试结果来说,string.Format占用的cpu资源更稳定,$语法糖就有些飘忽不定。

但是无论是从功能扩展还是长期性能考虑来看的话,只能说微软牛逼,语法糖真香。

附录:之前的测试代码反编译一下的结果

int a = 3;
int b = 2;
List<int> list = new List<int>();
Console.WriteLine("strat method one");
for (int i = 0; i < 10; i++)
{
	DateTime dt = DateTime.Now;
	for (int j = 0; j < 100000000; j++)
	{
		DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(6, 3);
		defaultInterpolatedStringHandler.AppendFormatted<int>(a);
		defaultInterpolatedStringHandler.AppendLiteral(" + ");
		defaultInterpolatedStringHandler.AppendFormatted<int>(b);
		defaultInterpolatedStringHandler.AppendLiteral(" = ");
		defaultInterpolatedStringHandler.AppendFormatted<int>(a + b);
		string c = defaultInterpolatedStringHandler.ToStringAndClear();
	}
	DateTime dt2 = DateTime.Now;
	Console.WriteLine("times " + i.ToString() + " : " + (dt2 - dt).Milliseconds.ToString());
	list.Add((dt2 - dt).Milliseconds);
}
list.Remove(list.Max());
list.Remove(list.Min());
Console.WriteLine(list.Average());
list.Clear();
Console.WriteLine("strat method two");
for (int k = 0; k < 10; k++)
{
	DateTime dt3 = DateTime.Now;
	for (int l = 0; l < 100000000; l++)
	{
		string c2 = string.Format("{0} + {1} = {2}", a, b, a + b);
	}
	DateTime dt4 = DateTime.Now;
	Console.WriteLine("times " + k.ToString() + " : " + (dt4 - dt3).Milliseconds.ToString());
	list.Add((dt4 - dt3).Milliseconds);
}
list.Remove(list.Max());
list.Remove(list.Min());
Console.WriteLine(list.Average());

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值