を使用すると、C#のコードがあるとします。結果変数ではなく、3つの文字列の実際の連結をやって:あなたはリテラル1つの定数文字列「XYZ ABC」を持っているので、C#で文字列の連結を最適化するインライン化は可能ですか?
const string ABC = "ABC";
const string XYZ = "XYZ";
var result = ABC + ":" + XYZ;
このようなコードは、コンパイラによって最適化されています実行時に
[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);
を、私はこの方法が実際にインライン化されていることが分かり、この場合:
は、今私は(コードより堅牢かつ少ないエラーが発生しやすくするために)、ユーザからの連結を非表示になりますヘルパー関数を紹介したいと思います呼び出しメソッドでは、逆アセンブリでは、定数文字列リテラル "ABC:XYZ"の代わりに、実行時にstring.Concat(string a, string b, string c)
を呼び出していることがはっきり分かります。
コンパイル時に速度と品質のバランスが取れていることを理解していますが、Combine
メソッドをC++マクロとして動作させて実行時の冗長な文字列連結を回避する方法はありますか?
P.S.一度計算される静的な読み取り専用文字列を導入することは、その質問に対する答えではありません。
なぜ、string.Concat()関数を使用できないのですか? – MethodMan
それは遅いので、私はパフォーマンスが必要 –
私の最後からのあなたの例に基づいてそれを実行しています..遅いではない..何のstring.Join()メソッドについて.. – MethodMan