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