ToString () оптимизирован компилятором? - PullRequest
3 голосов
/ 31 мая 2010

Предположим, у меня следующий код:

Console.WriteLine("Value1: " + SomeEnum.Value1.ToString() + "\r\nValue2: " + 
                    SomeOtherEnum.Value2.ToString());

Будет ли компилятор оптимизировать это для:

Console.WriteLine("Value1: " + SomeEnum.Value1 + "\r\nValue2: " +
                         SomeOtherEnum.Value2);

Я проверил это с помощью IL Disassembler и есть вызовы IL_005a: callvirt instance string [mscorlib]System.Object::ToString()

Я не знаю, оптимизирует ли это JIT.

1 Ответ

3 голосов
/ 31 мая 2010

Нет, все наоборот. Это:

Console.WriteLine("Value1: " + SomeEnum.Value1 + "\r\nValue2: " +
                     SomeOtherEnum.Value2);

Переводится компилятором в (эквивалент) этого:

string s = String.Concat("Value1: ", SomeEnum.Value1.ToString(), "\r\n Value2: ", SomeOtherEnum.Value2.ToString());
Console.WriteLine(s);

В обоих случаях генерируется один и тот же IL. Если вы спрашиваете, превращает ли JIT это в:

string s = String.Concat("Value1: ", "Value1", "\r\n Value2: ", "Value2");
Console.WriteLine(s);

Тогда ответ - нет. Хотя мне интересно, почему это будет для вас проблемой?

...