如何测试使用插值字符串和串联字符串的场景之间的差异,例如以下示例:
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
呼叫。
我如何评估一种方法相对于另一种方法的好处?这种类型的东西的基准已经存在吗?