Ребят, у меня возникли вопросы по строкам в c#.
По возможности ответьте с примерами. Заранее спасибо за ответ.
String
- это строки. Они неизменяемые т.е. конкретную строку нельзя подправить/дописать/укоротить. Любые операции над строками приводят к созданию новой строки (с копированием всего текста). При этом старая строка уходит в мусор (если у вас не остается на нее ссылки).
Так сделано из соображений
Соответственно, при сборке большой строки из многих маленких эта особенность - неизменяемость строк - приводит к множественному копированию данных и к генерации большого количества мусора.
Для решения этой проблемы есть класс StringBuilder
. Это не "строка", а класс для сборки строк из кусков, позволяющий в конце получить результирующую строку вызовом StringBuilder.ToString()
.
String
StringBuilder
String
не изменяемый тип. То есть если Вы создадите строку потом добавите ей несколько символов то это будет не старая модифицированная строка, а в памяти аллоцируется новый объект System.String
, который будет содержать в себе новую строку. При этом старый объект продолжает существовать в куче пока не произойдет сборка мусора. Такой вот безобидный код:
string str = string.Empty;
for(int i = 0; i < 1000; ++i)
{
str += "a";
}
Создаст в памяти 1000 потенциальных кандидатов для GC.
При вызове метода например Append
объекта StringBuilder будет изменятся уже существующая область памяти.
GC
лишними операциями.System.String
вполне достаточно. Если же вы заранее знаете что будете много изменять строку то класс StringBuilder
упростить жизнь GC
и CLR
. Врятли это как то скажется на производительности, если у Вас не большая система и реально вы не почувствуете разницу. Но когда в проекте идет работа с миллионами строк то тогда StringBuilder
не заменим (если конечно же Вы не напишете свой механизм работы со строками на неуправляемом коде или в unsafe-коде).Ответы на остальные вопросы очевидны.
Эта тема очень детально описана в книге "CRL via C#" Джеффри Рихтера.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
В моей программе есть вкладка, где я могу написать и запустить кодПри его запуске, появляется окошко с двумя TextBox'ами, в первом вывод, а во втором...
В данный момент при любом статусе оплаты или ее стадии осуществляется редирект на нужную страницу и все ок, но только при клике на "вернуться...