Будет ли оптимизировано объявление статической строки, содержащее вызовы Regex.Replace () и / или String.Format () во время компиляции? - PullRequest
0 голосов
/ 20 мая 2011

Согласно статье «Как: объединить несколько строк (Руководство по программированию в C #)» * строковые литералы и строковые константы будут объединены в одну строку во время компиляции. Далее говорится, что строковые переменные могут быть объединены только во время выполнения.

У меня есть только строковые литералы и константы значений перечисления, но у меня есть немного более сложный сценарий, в котором они сочетаются с двумя вызовами статических методов. Для удобства чтения и удобства я объявляю статическую строку, содержащую SQL, как показано в следующем примере:

private enum StatGroup
{
    Test,
    ...
}

private static string TestSql =
        Regex.Replace(
            String.Format(
                @"INSERT INTO StatCounts (StatGroup, LinkStatus, LinkCount)
                    SELECT   '{0}', LinkStatus, COUNT(*)
                    FROM     LinkInfo
                    GROUP BY LinkStatus",
                StatGroup.Test),
            @"\s+", " ", RegexOptions.Multiline),

Я использую String.Format (), чтобы использовать перечисление для вставки допустимых значений в столбец таблицы StatGroup. Я использую Regex, чтобы удалить ненужные пробелы в сценарии SQL. Пробелы не требуются во время выполнения, но хорошо служат для удобочитаемости кода.

Достаточно ли умен компилятор, чтобы оптимизировать вышесказанное во время компиляции?

1 Ответ

0 голосов
/ 20 мая 2011

Нет, это вызовы функций во время выполнения.Строковые конкататы литералов легко компилятору присоединиться во время компиляции, но RegEx и string.Format более сложны и предназначены только для времени выполнения.Конкретный констант из литералов является особым случаем.

...