插值字符串vs串联字符串

时间:2018-07-24 19:41:51

标签: c# performance string-interning

如何测试使用插值字符串和串联字符串的场景之间的差异,例如以下示例:

字符串插值

const string a = "I change per class or method";
string b = $"abcdefghijklmnopqrstuvw {a} xyz";
Console.WriteLine(b);

IL_0000:  ldstr       "abcdefghijklmnopqrstuvw {0} xyz"
IL_0005:  ldstr       "I change per class or method"
IL_000A:  call        System.String.Format
IL_000F:  call        System.Console.WriteLine
IL_0014:  ret         

这有望通过字符串实习存储所有代码的单个值a,但是使用string.Format的代价可能会抵消存储单个小字符串的好处。

串联

const string a = "I change per class or method";
string b = "abcdefghijklmnopqrstuvw " + a + " xyz";
Console.WriteLine(b);

IL_0000:  ldstr       "abcdefghijklmnopqrstuvw I change per class or method xyz"
IL_0005:  call        System.Console.WriteLine
IL_000A:  ret         

这将存储许多不同的字符串,因为它们看起来像是在编译时串联在一起的,因此您将拥有同一字符串的许多“相似”副本,但其中的a部分会有所不同。好处是没有string.Format呼叫。


我如何评估一种方法相对于另一种方法的好处?这种类型的东西的基准已经存在吗?

0 个答案:

没有答案