Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Class StringWriterAppend




Class StringBuilderAppend

Class StringAppened

{

const int iIterations = 10000;

public static void Main()

{

DateTirae dt = DateTime.Now;

string str = String.

for (int i = 0; i < iIterations; i++)

str +="abcclefghijkimnopqrstuvwxyz\r\n";

Console. WriteLine(DateTime. Now - tft);

В этой программе для измерения времени выполнения в начале и конце работы вызывается метод Now класса DateTime. Время выводится в часах, минутах, секундах и сотнях наносекунд. Выполнение каждой операции присоединения строк приводит к появлению нового объекта String. что в свою очередь требует выделения памяти. Каждая предшествующая строка помечается как доступная для сборки мусора. Скорость работы этой программы зависит от скорости компьютера, обычно это длится около 1 минуты.

Более удачным решением в нашем случае будет использование класса StringBuilder, определенного в пространстве имен Svstem.Text. В отличие от строк, хранящихся в объектах класса String class, строки в объектах класса StringBuilder могут изменяться. Класс StringBuilder динамически перераспределяет память, используемую строкой. Как только размер строки превышает размер буфера, объем буфера вырастает вдвое. Для преобразования объекта StringBuilder в объект String служит метод ToString.

Вот переработанный вариант программы, где применяется StringBuilder.

using System;

using System.Text;

{

const tut iIterations = 10000;

public static void Main()

{

DateTime dt = DateTime.Now;

StringBuilder sb = new StringBuilder();

for (int i = 0; i < iIterations; i++)

sb.Append("abcdefghijklnrnopqrstuvwxyz\r\n");

string str = sb.ToString();

Console.WriteLine(DateTime. Now - dt);

Время выполнения этой программы — менее секунды. Похоже, что она работает в 1 000 раз быстрее своей предшественницы.

Другой эффективный способ заключается в использовании класса StringWnter. определенного в пространстве имен System JO. Т акие классы, как StringWriter и StreamWriter (используемые для записи текстовых файлов), являются производными от абстрактного класса TextWrifer. Как и StringBuilder, класс StringWnter соединяет1 строки. Его большое преимущество — возможность использования целого арсенала методов Write и WriteLine, определенных в классе TextWriter. Вот пример программы, выполняющей ту же задачу, что и две предыдущие, но использующей объект StringWnter.

using System;

using System.10;

{

const int iIterations = 10000;

public static void Main()

DateTime dt = DateTime,Now;

StringWriter sw = new StringWriter();

for (int i = 0; i < iIterations; i++)

sw.WriteLine(“abcdefghijklirmopqrstuvwxyz”);

string str = sw.ToString();

Console,WriteLine(DateTime.Now - dt};

Скорость работы этой программы сравнима со скоростью StringBuilderAppend. Операционные системы, языки программирования, библиотеки классов и разнообразные инфраструктуры обеспечивают все увеличивающийся уровень абстракции, и иногда мы. программисты, теряем понимание механизмов, лежащих ниже этого уровня абстракции. То, что в коде может выглядеть как простое сложение, реально может быть связано с множеством операций более низкого уровня.




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 288; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.