|
Программирование >> Автоматически обновляемые приложения
(scrollText.Length - 1)) + scrollText.Substring (О, 1); this.Text = scrollText; Примечание Примеры находятся в проекте StringsFX на прилагаемом диске. Как соединять строки Во многих книжках пишут, что для сцепления строк нужно использовать класс StringBuiider, как самый эффективный способ. : Листинг 2.17. Соединение строк при помощи stringBuiider StringBuiider sb = new StringBuiider(); sb.Append( строка 1 ); sb.Append( строка 2 ); this.Text = sb.ToString0; Однако, на самом деле, это не всегда самый лучший выбор. В одном из выпусков журнала MSDN Magazine была статья, в которой говорилось, что существуют случаи, когда использование класса stringBuiider для каждой операции сцепления является не самым быстрым решением. Использование класса stringBuiider наиболее эффективно, если сцепляется много строк, если число строк неизвестно или если строки длинные. Однако если в вашей программе сцепляются лишь несколько строк, или если они относительно коротки, то лучшим выбором часто является использование стандартной операции сцепления. В этих случаях можно использовать либо стандартную конструкцию сцепления используемого языка (для языка С# это символ +), либо метод string.Concat. Такие способы обеспечивают сравнимую производительность. Дело в том, что при использовании класса stringBuiider происходят дополнительные затраты ресурсов, которые не возникают при использовании стандартных строк. К тому же, класс stringBuiider, в конечном счете, необходимо все равно преобразовывать в строку, что опять приводит к дополнительным расходам. Следовательно, если вы занимаетесь оптимизацией вашего приложения, то вам необходимо убедиться в том, что используемые методы сцепления строк себя оправдывают. В указанной статье рассматривается пример сцепления переменного количества строк длиной 25 символов каждая и показываются графики зависимости времени, не- Что лучше: Parse или Try Parse? в статье из предыдущего примера также сравниваются возможности методов Parse и TryParse. В .NET Framework 2.0 появился новый метод для базовых типов TryParse, который ПОХОЖ на метод Parse. Разница в их поведении заключается в том, что метод Parse при неудачной проверке данных вызывает исключение, а метод TryParse просто переходит к инструкции else. Нас интересует, что лучше использовать в программах для повышения производительности. Оказывается, что при успешном анализе значения строки somestring производительность обоих методов в точности одинакова. Таким образом, использование метода Parse не приводит к дополнительным затратам, если точно известно, что имеющаяся строка соответствует тому типу, в который она преобразуется. Однако производительность падает, если вам попадется хотя бы одна строка, которая не может быть успешно преобразована. В этом случае при использовании метода Parse управление будет передано в блок обработки исключения. А исключения практически всегда замедляют работу. Если данная ситуация возникает не слишком часто, то это не очень страшно. В противном случае приходится платить значительным ухудшением производительности. В противоположность методу Parse метод TryParse при такой ситуации использует блок if-else. При переходе к блоку else производительность не страдает. Метод TryParse всегда работает с той же или большей производительностью, что и метод Parse, НО разница между ними иногда может быть значительной. В статье приводятся такие цифры: в самом крайнем случае, когда ни одну строку не удается преобразовать в базовый тип, использование метода обходимого для сцепления нескольких двадцатипятисимвольных строк с объектом класса StringBuilder И СО строкой, ОТ ИХ количества. Результаты показывают, что если число сцеплений больше семи, лучше использовать класс StringBuilder, а если сцепляемых строк меньше, обычные способы соединения строк дают лучшую производительность. Примечание Более подробную информацию вы можете прочитать в статье CLR Inside Out в январском номере 2006 года журнала MSDN Magazine Существует также русскоязычная онлайн-версия статьи CLR вдоль и поперек на сайте http: msdn.microsoftxom:80/msdnmag/issues/06/01/CLRInsideOut/default .aspx?loc=ru. Сравнение и сортировка строк и, наконец, в указанной выше статье сказано несколько слов о сравнении строк. Строки в среде .NET являются довольно мощным инструментом в том смысле, что их можно сравнивать с учетом и без учета особенностей культурной среды. По умолчанию большинство строковых операций подобные особенности учитывают. Если нет необходимости сравнивать строки с учетом особенностей культурной среды, то для сравнения строк всегда следует использовать сравнение по порядковым номерам. Это же касается и сортировки строк. Экономия при использовании этого способа сортировки или сравнения получается значительной. Для класса system.string существуют специальные строковые методы, например, string.CompareOrdinai, подчеркивающие ценность такого подхода. Если вам не нужно учитывать регистр строк при сравнении, но при этом важно сохранить производительность, следует воспользоваться методом StringComparer .OrdinallgnoreCase. Он работает намного быстрее, чем метод, учитывающий особенности культурной Parse может занять в 150 раз больше времени, чем использование метода TryParse. С другой стороны, если анализируется 100 строк, и только одна из них не может быть успешно преобразована, метод TryParse работает всего лишь на 30 процентов быстрее. Таким образом, подтверждается общее правило, что не следует использовать исключения в качестве механизма управления логической последовательностью операций. Хотя использование метода TryParse более предпочтительно, если необходимо определить, соответствует ли строка другому типу данных, все же в некоторых ситуациях вместо него следует использовать метод Parse. Одной из них является ситуация, при которой ожидается, что анализ будет успешным, и, следовательно, неудачный анализ действительно является исключительным условием, а снижение производительности проблемы не составляет. Другой важный случай - когда необходимо определить конкретные причины неудачного преобразования, например, различить исключительные ситуации, связанные с переполнением и с неверным форматом. Для обоих примеров весьма подходящим является метод Parse. Исключение FormatException, возникающее В результате неудачи метода Parse, означает, что неудача была неожиданной, и случай действительно является исключительным по определению. Еще раз советую перечитать статью, ссылка на которую дана в предыдущем разделе.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |