Лучшая практика или разница в производительности между ToString () и конкатенацией - PullRequest
1 голос
/ 02 июня 2010

Когда я объединяю значения объектов вместе, чтобы сформировать строку в VB.NET, есть ли разница в производительности или рекомендуемый лучший метод между использованием & concat или + concat с вызовами .ToString() каждый объект?

Пример (который быстрее или лучше):

Dim result1 As String = 10 & "em"
Dim result2 As String = 10.ToString() + "em"

Ответы [ 4 ]

4 голосов
/ 02 июня 2010

Разницы в производительности нет.Если вы пропустите вызов .ToString() явно, компилятор по сути просто заменит его для вас.Если вы используете Option Explicit, вам потребуется вызвать метод, иначе вы получите ошибку компиляции.Я слышал веские причины для того, чтобы предпочесть и & и + семантически, поэтому выбор там действительно за вами.

1 голос
/ 02 июня 2010

Строки являются неизменяемыми - это означает, что каждый раз, когда вы манипулируете строкой, создается новый экземпляр строкового объекта.

В этих сценариях для достижения лучшей производительности (и общих рекомендаций) используйте класс StringBuilder System.Text.

В вашем примере (я кодер на C #, поэтому извиняюсь, если мой VB-код неверен)

Dim result As StringBuilder() = new StringBuilder()
result.Append("10")
result.Append("em")
Dim resultString As String = result.ToString()

Только когда вы вызываете метод .ToString() объекта StringBuilder, это экземпляр созданной строки.

Вы должны привыкнуть использовать StringBuilder в качестве лучшей практики.

1 голос
/ 02 июня 2010

Я никогда не пробовал и не видел тест производительности между ними, и я сомневаюсь, что разница в скорости действительно есть. Я считаю, что лучше использовать первый вариант, потому что .ToString () выводится. Позвольте языку скрыть эту деталь от вас, как если бы вы были в динамическом языке.

0 голосов
/ 02 июня 2010

Вы также можете использовать string.concat (str1, str2, str3, str4). Это перегруженная функция, которая может принимать от 2 до 4 строковых аргументов. С конкатенацией 3 или 4 строк это самый быстрый вариант, так как он реализован для выполнения конкатенации в одной операции, которая сохраняет производительность, поскольку строки являются неизменяемыми.

Как только вы нажмете ~ 10 + строк, вы должны использовать класс stringbuilder, как это предложено RPM1984.

В противном случае я предлагаю использовать '&' для конкатенации строк. Это избавляет от путаницы, так как «+» можно легко спутать для целочисленных операций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...