25.07.2017 Views

Intro-CSharp-Book-v2015

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Глава 13. Символни низове 489<br />

Със зелена (горна) линия е подчертан часът в началото на изпълнението<br />

на програмата, а с червена (долна) – нейният край. Обърнете внимание на<br />

времето за изпълнение – почти 6 минути! Подобно изчакване е<br />

недопустимо за такава задача и не само ще изнерви потребителя, а ще го<br />

накара да спре програмата без да я изчака до край.<br />

Обработка на символни низове в паметта<br />

Проблемът с времеотнемащата обработка на цикъла е свързан именно с<br />

работата на низовете в паметта. Всяка една итерация създава нов обект в<br />

динамичната памет и насочва референцията към него. Процесът изисква<br />

определено физическо време.<br />

На всяка стъпка се случват няколко неща:<br />

1. Заделя се област от паметта за записване на резултата от долепването<br />

на поредното число. Тази памет се използва само временно, докато се<br />

изпълнява долепването, и се нарича буфер.<br />

2. Премества се старият низ в новозаделения буфер. Ако низът е дълъг<br />

(например 1 MB или 10 MB), това може да е доста бавно!<br />

3. Долепя се поредното число към буфера.<br />

4. Буферът се преобразува в символен низ.<br />

5. Старият низ, както и временният буфер, остават неизползвани и по<br />

някое време биват унищожени от системата за почистване на паметта<br />

(garbage collector). Това също може да е бавна операция.<br />

Много по-елегантен и удачен начин за конкатениране на низове в цикъл е<br />

използването на класа StringBuilder. Нека видим как става това.<br />

Построяване и промяна на низове със StringBuilder<br />

StringBuilder е клас, който служи за построяване и промяна на символни<br />

низове. Той преодолява проблемите с бързодействието, които възникват<br />

при конкатениране на низове от тип string. Класът е изграден под формата

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!