В чем разница между: возвращать строку с string.format () и без string format ()? - PullRequest
0 голосов
/ 31 марта 2020
public static string TestMethod()
{
    return string.Format("HelloWorld");
}

и

public static string TestMethod()
{
    return "HelloWorld";
}

У меня сейчас во втором есть неявный вызов string.Format () но мне нужна производительность , что рекомендуется?

Ответы [ 4 ]

1 голос
/ 02 апреля 2020

Краткий ответ

Из соображений производительности и читабельности всегда используйте второй подход (возвращение строкового литерала), если вам действительно не нужно форматирование или манипулирование строкой. Не только вы сохраняете циклы ЦП, но и память.

Пояснение

Первый пример (string.Format(...) один), даже если он ничего не делал внутри (даже если это возможно), он все равно вернуть копию переданной строки. Это означает, что сборщик мусора будет собирать больше мусора позже во время выполнения программы. Давайте сделаем некоторые вычисления очень примитивным способом. Вы передаете строку "Hello World". Каждый символ этой строки представляет собой один байт, так что в общей сложности 11 байтов потраченной впустую памяти. Кажется незначительным, верно? Теперь представьте, что эта строка кода запускается 1 миллион раз. Теперь у вас есть 11 МБ мусора.

Второй пример просто возвращает строку без каких-либо других действий. Таким образом, мусор не генерируется.

0 голосов
/ 02 апреля 2020

string.Format("HelloWorld"); вызывает public static String Format(String format, params Object[] args) перегрузку, которая делает кучу вещей, пожалуйста, обратитесь к Справочный источник для получения более подробной информации.

Чтобы немного почувствовать, что происходит внутри, попробуйте этот код вместо:

public static string TestMethod()
{
    return string.Format("Hello{0}World");
}
0 голосов
/ 02 апреля 2020

string.Format предназначен для вставки значений в строку во время выполнения, см. официальное введение .

return "HelloWorld" не вызовет string.Format - он вернет строковый литерал напрямую .

return string.Format("HelloWorld") вызовет string.Format, который ничего не заменит. Компилятор может решить удалить этот вызов, поскольку он знает строку постоянного формата, но этого не произошло, когда я тестировал. Поэтому я полагаю, что это будет медленнее, хотя вам следует измерить, если вы беспокоитесь о производительности.

0 голосов
/ 31 марта 2020
return string.Format("hellow worl");

string.Format () имеет возвращаемое значение. Все методы String и операторы C#, которые появляются для изменения строки, фактически возвращают результаты в новом строковом объекте. возвращенный объект объявляет и инициализирует строки, определенные непосредственно во время выполнения.

return "hellow world";

"hellow worl" является неизменным. Строковые объекты являются неизменяемыми: их нельзя изменить после того, как они были созданы. объявлять и инициализировать строки, определенные непосредственно во время выполнения.

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