powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Теоретический вопрос. Что лучше StringBuilder или List<string> ?
25 сообщений из 36, страница 1 из 2
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626361
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Часто бывает, что надо собрать итоговую строку из всяких кусочков.

Потом myStringBuilder.ToString() или myList.Join("хрень какая-нибудь")

Я , конечно, могу провести исследования, но вдруг кто-то уже делал?
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626364
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

При малом количестве строк String.Concat быстрее. При большом (больше ~5-10), уже быстрее StringBuilder.
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626372
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2myList.Join("хрень какая-нибудь")это не в тему. Разное назначение.
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626379
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Petro123Cat2myList.Join("хрень какая-нибудь")это не в тему. Разное назначение.
Почему? И так и так получается итоговая строка
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626381
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исследований не делал, но StringBuilder это Сhar[], т.е. массив букав, которые трансформируются в строку одним действием.
Массив строк трансформируется в одну строку N-1 действием, где N размер массива. ИМХО это тормознее.
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626387
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Почему? И так и так получается итоговая строка
Вход то разный. Либо я не понял.
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626396
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИсследований не делал, но StringBuilder это Сhar[], т.е. массив букав, которые трансформируются в строку одним действием.
Массив строк трансформируется в одну строку N-1 действием, где N размер массива. ИМХО это тормознее.

При малом количестве строк, конкатенация быстрее. На скорость оказывают влияние прежде всего выделение памяти и копирование. Конкатенация очень хорошо оптимизирована, чтобы использовать её повсеместно, когда не надо склеивать кучу строк.
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626405
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если не нужно вставлять в начало или середину текст, можно так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
            using (var memoryStream = new MemoryStream())
            using (var stringWriter = new StreamWriter(memoryStream))
            {
                int i = 0;
                while (i++ < 10)
                {
                    stringWriter.Write(i);
                    stringWriter.Write(": ");
                    stringWriter.WriteLine("HelloWorld!");
                }
                stringWriter.Flush();
                memoryStream.Position = 0;
                using (var stringReader = new StreamReader(memoryStream))
                {
                    var text = stringReader.ReadToEnd();
                    MessageBox.Show(text);
                }
            }
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626455
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё не стоит забывать про работу GC, которую обеспечит массовая конкатенация строк
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626463
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было уже, и даже с тестами: http://www.sql.ru/forum/1149509/optimalnyy-sposok-skleyki-ienumerable-string-v-stroku
hVosttCat2,
При малом количестве строк String.Concat быстрее. При большом (больше ~5-10), уже быстрее StringBuilder.
Смотря что в аргументах Concat. Если строки - да, быстрее, т.к. в итоге вызывается Buffer.Memmove , но внутри реализации самого String, с меньшим количеством проверок и всяческих аллокаций. Если param object[], IEnumerable<T>, итд - однохренственно, т.к. конкатенация делается всё тем же StringBuilder'ом (который в итоге тоже вызывает Buffer.Memmove).
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626472
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стати, только hVostt озвучил цифру до какой не следует голову забивать сабжем.
10 строк.
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626491
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Стати, только hVostt озвучил цифру до какой не следует голову забивать сабжем.
10 строк.
А если 10000 раз по 10 строк?
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626496
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныPetro123Стати, только hVostt озвучил цифру до какой не следует голову забивать сабжем.
10 строк.
А если 10000 раз по 10 строк?
Пофиг сколько раз, т.к. myStringBuilder.ToString() тоже 10000 раз надо будет делать.
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626515
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныPetro123Стати, только hVostt озвучил цифру до какой не следует голову забивать сабжем.
10 строк.
А если 10000 раз по 10 строк?))))
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626544
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныБыло уже, и даже с тестами: http://www.sql.ru/forum/1149509/optimalnyy-sposok-skleyki-ienumerable-string-v-stroku

да какие там тесты...
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626552
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще для ускорения можно задействовать String.Concat (String, String, String, String)
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626560
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕще для ускорения можно задействовать String.Concat (String, String, String, String) это быстрее чем сложить плюсом?
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626562
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123это быстрее чем сложить плюсом?

Это тоже самое.
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626660
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttCat2,

При малом количестве строк String.Concat быстрее. При большом (больше ~5-10), уже быстрее StringBuilder.
Если количество строк известно на момент компиляции, либо в рантайме будем иметь string[], то String.Concat однозначно быстрее.
Если будем иметь IEnumerable<T>, то лучше использовать String.Concat, он прячет в себя всю кухню со StringBuilder и несколько оптимизирован.
Если складываем в цикле заранее неизвестное количество строк, то лучше StringBuilder.
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626682
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Dima TЕще для ускорения можно задействовать String.Concat (String, String, String, String) это быстрее чем сложить плюсом?

Прикол в том, что у string нет перегруженного оператора "+" - конструкция типа "s1 + s2" самим компилятором превращается в "String.Concat(s1, s2)". Сам совершенно случайно и неожиданно узнал это, только через 10 с лишним лет писательства на шарпе, при декомпиляции какой-то хрени :-)
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626689
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
Не поверишь, но его нет и например у Int32
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626696
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЕсли будем иметь IEnumerable<T>, то лучше использовать String.Concat, он прячет в себя всю кухню со StringBuilder и несколько оптимизирован.
Если складываем в цикле заранее неизвестное количество строк, то лучше StringBuilder.

Хм, интересно, а когда в IEnumarable у нас стало «заранее известное» количество строк? :)
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626698
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatПрикол в том, что у string нет перегруженного оператора "+" - конструкция типа "s1 + s2" самим компилятором превращается в "String.Concat(s1, s2)". Сам совершенно случайно и неожиданно узнал это, только через 10 с лишним лет писательства на шарпе, при декомпиляции какой-то хрени :-)

Ну а по сути-то какая разница, каким образом получился String.Concat из "+"? Компилятор вообще очень многое может оптимизировать, убирать переменные, разматывать циклы и т.д.
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626702
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Теоретический вопрос. Что лучше StringBuilder или List<string> ?
    #39626709
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот результате на одном из рабочих тостеров

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
// * Summary *

BenchmarkDotNet=v0.10.13, OS=Windows 10 Redstone 3 [1709, Fall Creators Update] (10.0.16299.309)
Intel Core i7-7700 CPU 3.60GHz (Kaby Lake), 1 CPU, 8 logical cores and 4 physical cores
Frequency=3515633 Hz, Resolution=284.4438 ns, Timer=TSC
  [Host]     : .NET Framework 4.7 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2633.0
  DefaultJob : .NET Framework 4.7 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2633.0


        Method | Loops |          Mean |         Error |        StdDev |
-------------- |------ |--------------:|--------------:|--------------:|
  StringConcat |     1 |      66.34 ns |     0.7295 ns |     0.6824 ns |
 StringBuilder |     1 |      95.96 ns |     2.1974 ns |     2.6158 ns |
  StringConcat |     2 |     146.51 ns |     1.8228 ns |     1.6158 ns |
 StringBuilder |     2 |     168.01 ns |     3.7330 ns |     4.1492 ns |
  StringConcat |     3 |     242.12 ns |     4.8869 ns |     6.6892 ns |
 StringBuilder |     3 |     247.28 ns |     4.2082 ns |     3.9363 ns |
  StringConcat |     4 |     336.79 ns |     2.7485 ns |     2.2951 ns |
 StringBuilder |     4 |     317.92 ns |     7.1944 ns |     7.9966 ns |
  StringConcat |     5 |     422.54 ns |     7.7260 ns |     7.2269 ns |
 StringBuilder |     5 |     387.48 ns |     6.7156 ns |     6.2818 ns |
  StringConcat |    10 |     883.19 ns |    19.3459 ns |    28.3569 ns |
 StringBuilder |    10 |     730.95 ns |    13.7119 ns |    12.8262 ns |
  StringConcat |   100 |  11,478.13 ns |   172.2509 ns |   152.6959 ns |
 StringBuilder |   100 |   8,053.03 ns |   160.4904 ns |   219.6811 ns |
  StringConcat |  1000 | 275,755.58 ns | 5,462.6900 ns | 6,290.8413 ns |
 StringBuilder |  1000 |  85,726.60 ns |   522.7074 ns |   488.9408 ns |



Выделил переломный момент, где StringBuilder уже быстрее.
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Теоретический вопрос. Что лучше StringBuilder или List<string> ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]