Я спрашиваю об этом ради производительности - использование большого количества боксов приводит к большому распределению кучи, что приводит к увеличению количества сборов GC, что иногда приводит к зависанию приложений, что раздражает пользователей.
Использует ли интерполяция строк С# 6 бокс, как это делает string.Format() для своих аргументов?
Ответы (1)
Все, что делает интерполяция строк (по крайней мере, в общем случае), это вызов string.Format()
.
Прямо сейчас вызов string.Format()
выделяет довольно много ресурсов, и не только из-за бокса (например, string.Format("{0:s} - {1:B}: The value is: {2:C2}", DateTime.UtcNow, Guid.NewGuid(), 3.50m)
делает 13 аллокаций, только 3 из них из-за бокса), хотя есть разговоры об улучшении этого в будущем.
Хотя, как обычно, когда дело доходит до производительности, вы не должны просто слепо писать везде нечитаемый код, потому что читаемая версия имеет известные проблемы с производительностью. Вместо этого ограничьте нечитаемый эффективный код теми его частями, которые действительно в нем нуждаются.
person
svick
schedule
19.10.2016
имеет известные проблемы с производительностью. - это вообще проблема производительности? Нынешняя система
String.Format
была разработана еще в 2000-2001 годах, когда вычислительные ресурсы были ничтожными по сравнению с сегодняшними, и я не припомню, чтобы у кого-то были проблемы с ней в то время — почему люди поднимают шум сейчас?
- person Dai; 02.08.2020
@Dai Это проблема с производительностью. Актуальна ли эта проблема для вас, зависит от множества факторов. И если это не имеет отношения к вам, вы должны просто игнорировать это.
- person svick; 02.08.2020
string.Format()
во время компиляции. См. также здесь. - person Axel Kemper   schedule 19.10.2016