Предположит, у вас есть такие C# код:Можно ли сделать inlining в 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. введение статических строк readonly, которые вычисляются один раз, не является ответом на вопрос.
Почему вы не можете просто использовать функцию string.Concat().? – MethodMan
, потому что он медленный, мне нужно производительность –
запуск его на основе вашего примера с моего конца не замедляется при wll .. как насчет метода string.Join() then .. – MethodMan