ldstr
— это IL для загрузки определенного токена строки из метаданных.
ldsfld
— это IL для загрузки указанного поля, в данном случае это string.Empty
.
Другими словами, это совершенно разные операции, которые в данном случае приводят к одному и тому же результату. Как они реализованы на уровне сборки? Что ж, это вполне может зависеть от используемой вами версии CLR. Спросите своих друзей, о какой версии они говорят... настольная (32 или 64-битная? 1, 2, 2SP1, 2SP2, 4?), Compact Framework (опять же, какая версия?), Silverlight (какая операционная система, какая версия ?) Они использовали cordbg
в коде, который вы на самом деле обсуждаете, или они сделали это в каком-то образце кода, который, возможно, не был оптимизирован таким же образом?
Я бы (и уже) утверждал, что вы должны использовать то, что считаете более читаемым. Лично я предпочитаю ""
, но другие предпочитают string.Empty
. Это нормально. Однако аргументация в пользу одного над другим по соображениям производительности требует доказательств... и в идеале, доказательств, основанных на коде, который вы на самом деле пишете, а не на микротесте.
Я был бы удивлен, увидев код, в котором любое различие между ними на самом деле приводило к значительной разнице в производительности реального кода, за исключением ситуаций, когда в любом случае, возможно, существует лучший способ решения задачи.
person
Jon Skeet
schedule
09.09.2010