TGViewer
Библиотека шарписта | C#, F#, .NET, ASP.NET Библиотека шарписта | C#, F#, .NET, ASP.NET @csharpproglib · 21.7K subscribers
Post #7136 3.86K
💡 Как устроен StringBuilder. Почему это не один большой буфер

Многие представляют StringBuilder как один массив символов, который растёт по мере добавления текста. На самом деле внутри он устроен как связный список кусков, и из этого вытекает почти всё его поведение.

🔴 Каждый StringBuilder хранит текущий кусок, обычный char[], и ссылку на предыдущий кусок. Когда вы вызываете Append, символы пишутся в текущий кусок. Как только в нём кончается место, выделяется новый кусок, а старый остаётся висеть в цепочке позади. Получается список кусков, направленный назад, от последнего к первому.

🔴 Отсюда понятны несколько вещей. Append в среднем дешёвый, потому что чаще всего это запись в уже выделенный кусок без копирования всего текста. ToString дороже, ведь он проходит по всей цепочке и собирает символы в одну новую строку. Индексатор по символу на длинном тексте тоже не бесплатный, так как может потребоваться пройти по нескольким кускам, чтобы добраться до нужной позиции.

Эта же модель объясняет свежий метод MoveChunks из .NET 11 Preview 5. Раз текст это цепочка кусков, передать его в другой билдер можно, просто переставив ссылку на цепочку, без копирования символов. Поэтому операция и выполняется за O(1), а исходный билдер остаётся пустым, но рабочим.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#il_люминатор
  • 🔥 15
  • ❤ 3
More from @csharpproglib
  1. Sep 21, 2026⚙️ Настоящие атомарные операции Если Volatile решает проблему видимости, то Interlocked ре…
  2. Sep 20, 2026💪 Разминка перед трудовыми буднями Что произойдёт? ❤️ — список станет [1, 3] 🔥 — Invalid…
  3. Sep 19, 2026🧩 Middleware в ASP.NET Core: 3 ловушки Middleware — звено HTTP pipeline: app.Use(async (c…
  4. Sep 18, 2026📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #garbage_collector
  5. Sep 17, 2026🦆 Duck typing в C# — почти как в TypeScript В TypeScript достаточно, чтобы у объекта был…
  6. Sep 17, 2026🧠 Почему .NET-под съедает всю память? kubectl top pod показывает 1 ГБ, а managed heap зан…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →