假设有这样的C#代码:是否可以在C#中进行内联,从而优化字符串连接?
const string ABC = "ABC";
const string XYZ = "XYZ";
var result = ABC + ":" + XYZ;
这样的代码由编译器优化,所以你有一个恒定的字符串文字:在结果变量“ABC XYZ”,而不是做3串的实际级联在运行时。
现在,我要介绍一个辅助功能,将隐藏来自用户的连接(使代码更健壮且不易出错):
[MethodImpl(MethodImplOptions.AggressiveInlining)]
static string Combine(string first, string second) => first + ":" + second;
const string ABC = "ABC";
const string XYZ = "XYZ";
var result = Combine(ABC, XYZ);
在这种情况下,我看到,该方法实际上是内联在调用方法中,但在反汇编中,我可以清楚地看到它在运行时调用string.Concat(string a, string b, string c)
,而不是有一个常量字符串文字“ABC:XYZ”。
我知道在编译过程中速度和质量之间存在一个平衡,但是有什么技巧可以使Combine
方法作为C++宏来避免运行时多余的字符串连接?
P.S.引入一次得到计算的静态只读字符串不是问题的答案。
为什么你不能只使用string.Concat()函数。? – MethodMan
因为它很慢,我需要性能 –
运行它根据你的例子从我的结尾是不是慢在wll ..怎么样string.Join()方法然后.. – MethodMan