можно хотеть посмотреть Простая Сериализация XML проект. Это - самая близкая вещь, которую я нашел к Системе. Xml. Сериализация в.Net.
Если вы делаете это в .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 или (хотя это менее эффективно) установить емкость дважды:
В .NET 4.0 вы можете вызвать sb.Clear ()
, но в более старых версиях вы должны установить sb.Length = 0
.
Метод Clear ()
был добавлен в .NET 4.0.
Создайте новый StringBuilder. Старый поддерживает связанные с ним ресурсы (например, буфер максимальной длины), которые лучше всего просто убрать мусором.
Думаю, вы проводите преждевременную оптимизацию.
Готов поспорить, что выполнение sb.Length = 0;
будет самым быстрым способом избежать создания другого объекта и размещения еще один объект для сборки мусора.
Я думаю, что создание нового StringBuilder будет лучшим решением проблем с памятью. а установка sb.Length
будет лучшим способом решить проблему скорости ..
Из материалов сообщества на MSDN :
Чтобы эффективно очистить конструктор струн, не разрушая его используйте:
someStringBuilder.length = 0; someStringBuilder.capacity = 0;
Это уничтожает как его содержимое, так и изменяет его размер до нуля. Как указано выше очистить размер может повлиять меньше приложений.
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.
Я бы сказал, что лучший способ очистить его - использовать 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);