Что является более эффективным, "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 

источник

Использование String.IsNullOrEmpty(data) скорее

Ни одна проверка не станет вашим узким местом. Однако, если вы выберете первое, вы можете столкнуться с 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)

Использование String.IsNullOrEmpty() Проверять.

Другие вопросы по тегам