Конкатенация: Что это такое?
Конкатенировать - это ставить что-то одно за другим, в программировании мы конкатенируем слова, строки вот так:
string maValeur = "Мое значение 1";
maValeur = maValeur + ", Мое значение 2";
maValeur = maValeur + ", Мое значение 3";
//Что дает:
//Мое значение 1,Мое значение 2,Мое значение 3
Так что это очень хорошо, когда у нас всего лишь небольшая конкатенация, но когда мы делаем цикл вот так:
string maValeur = null;
//Цикл из 100.000 конкатенаций
for(int i=0; i < 100000; i++)
{
maValeur = maValeur + ",Мое значение " + i;
}
20 секунд и 768 миллисекунд! (00:20.768) ИЗБЕГАТЬ! Производительность совсем не оптимальна!
Почему?
Используя такой вид конкатенации со строками, каждый раз вы выделяете память для каждой добавленной строки, и если вы хотите изменить или манипулировать этой переменной, это действительно неэффективно! Microsoft, зная это, изобрела StringBuilder! String и Builder для построения строк.
StringBuilder
Объект StringBuilder используется очень просто:
StringBuilder maValeur = new StringBuilder();
//Цикл из 100.000 конкатенаций
for(int i=0; i < 1000000; i++)
{
maValeur.Append("Мое значение ").Append(i).Append(",");
}
И бах! 6 миллисекунд! (00:00.006)
Как вы можете заметить, объект StringBuilder делает то же самое, но в 1000 раз быстрее и не занимает слишком много памяти! Достаточно использовать метод Append.
Кроме того, StringBuilder позволяет манипулировать строкой так, как вам нужно:
| Метод | Описание |
|---|---|
| StringBuilder.Append | Конкатенирует элемент строки в конец уже содержащегося значения в StringBuilder |
| StringBuilder.AppendFormat | Конкатенирует элемент строки в конец уже содержащегося значения в StringBuilder, добавляя возможность форматирования с индексами {x} |
| StringBuilder.Insert(start, "Значение") | Добавляет элемент строки в определенное место уже содержащегося значения в StringBuilder |
| StringBuilder.Remove(start, длина) | Удаляет определенное количество символов из уже содержащегося значения в StringBuilder с определенной позиции до заданной длины. |
AppendFormat
Вы можете использовать StringBuilder так же, как вы используете string.Format(), вот так:
StringBuilder maValeur = new StringBuilder();
int maLigne = 1000;
for(int i=0; i < 1000; i++)
{
maValeur.AppendFormat("Мое значение {0} - это значение строки {1},", i, maLigne);
maLigne++;
}
Вы передаете на индекс 0 -> i и на индекс 1 -> maLigne
Insert
Чтобы точно вставить другую строку в StringBuilder, ничего проще:
StringBuilder maValeur = new StringBuilder();
maValeur.Append("Моя собака гуляет в саду.");
maValeur.Insert(10,"и моя кошка ");
maValeur.Insert(33,"nt");
//Результат: Моя собака и моя кошка гуляют в саду.
Remove
Чтобы удалить символы, тоже очень просто:
StringBuilder maValeur = new StringBuilder();
maValeur.Append("Моя собака гуляет в саду.");
maValeur.Insert(10,"и моя кошка ");
maValeur.Insert(33,"nt");
maValeur.Remove(35, 15);
//Результат: Моя собака и моя кошка гуляют.
Привыкайте использовать StringBuilder вместо конкатенаций строк, вы выиграете в производительности, поверьте мне!
Кроме того, это было одобрено Чаком Норрисом:

Aucun commentaire pour le moment.