Что является более эффективным, "data.Length==0" или "data==string.Empty"?
Я хочу проверить, является ли переменная строка data
содержит пустую строку.
Что более эффективно, data.Length==0
или же data==string.Empty
?
Я забыл сказать, что data
был проверен и гарантированно не будет null
,
9 ответов
Результаты теста на 100 миллионов итераций:
Equality operator ==: 796 ms
string.Equals: 811 ms
string.IsNullOrEmpty: 312 ms
Length: 140 ms [fastest]
Instance Equals: 1077 ms
Ни одна проверка не станет вашим узким местом. Однако, если вы выберете первое, вы можете столкнуться с NullReferenceException
если строка равна нулю. У вас не было бы этой проблемы со вторым.
Я бы сказал, что вы должны использовать метод String.isNullOrEmpty, чтобы также проверить наличие нулей.
Как уже упоминалось, люди используют string.IsNullOrEmpty(str)
, или же string.IsNullOrWhiteSpace(str)
введен в.NET 4.0 Framework.
Лучшая практика заключается в использовании String.IsNullOrEmpty
(или, если это соответствует вашим требованиям, из.Net 4.0 - String.IsNullOrWhiteSpace
).
Если вы позвоните s.Length
тогда вы получите NullReferenceException
если строка null
, Это означает, что вам нужно будет проверить if(s == null || s.Length == 0)
, Это будет наиболее эффективным и, вероятно, самым быстрым, но вы также можете использовать String.IsNullOrEmpty
,
s == string.Empty
вернет ложь, если строка null
(null
это не то же самое, что пустая строка).
С точки зрения производительности, не тратьте больше времени на размышления об этом. Это почти никогда, никогда, никогда, никогда не повлияет на производительность.
Логически, data.Length == 0
более эффективен, потому что он просто сравнивает два целочисленных значения, тогда как data == String.Empty
сравнивает строки (хотя и очень короткие).
Однако существует целый ряд оптимизаций, которые компилятор или инфраструктура могут потенциально сделать, чтобы минимизировать или устранить любую разницу. Это затрудняет создание абсолютных утверждений без запуска собственных временных тестов.
В конце концов, я сомневаюсь, что разницы будет достаточно, чтобы заметить.
Я выберу третий, он менее подвержен ошибкам:
String.IsNullOrEmpty(data)