лучший способ очистить содержание StringBuilder.NET

"Простая Сериализация XML" Проект

можно хотеть посмотреть Простая Сериализация XML проект. Это - самая близкая вещь, которую я нашел к Системе. Xml. Сериализация в.Net.

69
задан David Espart 26 July 2011 в 16:13
поделиться

7 ответов

Если вы делаете это в .NET 2.0 или 3.5, напишите метод расширения, чтобы сделать это следующим образом:

/// <summary>
///     Clears the contents of the string builder.
/// </summary>
/// <param name="value">
///     The <see cref="StringBuilder"/> to clear.
/// </param>
public static void Clear(this StringBuilder value)
{
    value.Length = 0;
    value.Capacity = 0;
}

Затем вы можете очистить его следующим образом:

someStringBuilder.Clear();

Затем, когда выйдет 4.0, вы можете отказаться от своего метода расширения в пользу версии 4.0.

ОБНОВЛЕНИЕ : Вероятно, не рекомендуется устанавливать для Емкость нулевое значение. Это гарантирует перераспределение при добавлении в построитель, если вы повторно используете один и тот же экземпляр. Однако память в экземпляре построителя не освобождается, пока вы не установите для параметра Емкость очень маленькое значение (например, 1). По умолчанию свойство Capacity равно 16. Вы можете использовать 16 или (хотя это менее эффективно) установить емкость дважды:

  • Установите значение 1 или ноль, чтобы очистить память.
  • Установите значение вашего исходное значение емкости (которое может отличаться от 16) для его восстановления.
68
ответ дан 24 November 2019 в 13:46
поделиться

В .NET 4.0 вы можете вызвать sb.Clear () , но в более старых версиях вы должны установить sb.Length = 0 .

Метод Clear () был добавлен в .NET 4.0.

28
ответ дан 24 November 2019 в 13:46
поделиться

Создайте новый StringBuilder. Старый поддерживает связанные с ним ресурсы (например, буфер максимальной длины), которые лучше всего просто убрать мусором.

15
ответ дан 24 November 2019 в 13:46
поделиться

Думаю, вы проводите преждевременную оптимизацию.

Готов поспорить, что выполнение sb.Length = 0; будет самым быстрым способом избежать создания другого объекта и размещения еще один объект для сборки мусора.

Я думаю, что создание нового StringBuilder будет лучшим решением проблем с памятью. а установка sb.Length будет лучшим способом решить проблему скорости ..

11
ответ дан 24 November 2019 в 13:46
поделиться

Из материалов сообщества на MSDN :

Чтобы эффективно очистить конструктор струн, не разрушая его используйте:

  someStringBuilder.length = 0;
 someStringBuilder.capacity = 0;

Это уничтожает как его содержимое, так и изменяет его размер до нуля. Как указано выше очистить размер может повлиять меньше приложений.

11
ответ дан 24 November 2019 в 13:46
поделиться

If you are looking to reduce memory usage I would use the CLR Profiler to check how much memory your StringBuilder objects are using through their lifecycle using the methods others have described above. Then you can satisfy yourself that the option you choose is suitable for your needs and is releasing the resources you need it to.

2
ответ дан 24 November 2019 в 13:46
поделиться

Я бы сказал, что лучший способ очистить его - использовать sb = new StringBuilder (); . При этом, я думаю, было бы даже лучше, если бы вы вообще создали новый объект построителя строк.

EDIT

Я надеюсь, что само собой разумеется, что это лучшее решение.

public StringBuilder MakeString(IEnumerable<CoolType> list)
{
    StringBuilder sb = new StringBuilder();

    foreach(var whatever in list)
    {
        sb.Append("{0}", whatever);
    }
}

var sb = MakeString(whateverList);
// Do stuff
// Clear stuff
sb = MakeString(whateverList2);
1
ответ дан 24 November 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: