假設有這樣的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