Как повысить производительность сцепления строк в Visual C#

Переводы статьи Переводы статьи
Код статьи: 306822 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье показаны преимущества использования Класс StringBuilder класс через методы традиционного объединения. Строки в.NET Framework, инвариантные (то есть указанный текст доступен только для чтения после начального распределения). Это дает множество преимуществ производительности и представляет некоторые трудности разработчиком, привыкли приемов манипуляции строка C/C++.

Описание строки.NET Framework

Одним из способов повышения сцепление строк через strcat() в Visual C/C++ является выделить массив символов большой буфер и копировать строку данных в буфер. В.NET Framework string является неизменным; его нельзя изменить на месте. C# + сцепление оператор создает новую строку и вызывает снижению производительности, когда он объединяет большие объемы текста.

Однако.NET Framework включает Класс StringBuilder класс, который оптимизирован для объединения строк. Он предоставляет же преимущества, как с помощью массива знаков в C/C++, а также автоматическое увеличение размера буфера (при необходимости) и отслеживания длины. Образец приложения в этой статье демонстрируется использование Класс StringBuilder класс и сравнение производительности для сцепления.

Построение и запуск демонстрационного приложения

  1. Запустите Visual Studio, а затем создайте новое приложение Visual C# консоли.
  2. В следующем коде используется оператор += объединения и Класс StringBuilder класс время 5000 конкатенации 30 символов каждая. Добавьте этот код процедуры main.
    const int sLen=30, Loops=5000;
    DateTime sTime, eTime;
    int i;
    string sSource = new String('X', sLen);
    string sDest = "";
    // 
    // Time string concatenation.
    // 
    sTime = DateTime.Now;
    for(i=0;i<Loops;i++) sDest += sSource;
    eTime = DateTime.Now;
    Console.WriteLine("Concatenation took " + (eTime - sTime).TotalSeconds + " seconds.");
    // 
    // Time StringBuilder.
    // 
    sTime = DateTime.Now;
    System.Text.StringBuilder sb = new System.Text.StringBuilder((int)(sLen * Loops * 1.1));
    for(i=0;i<Loops;i++) sb.Append(sSource);
    sDest = sb.ToString();
    eTime = DateTime.Now;
    Console.WriteLine("String Builder took " + (eTime - sTime).TotalSeconds + " seconds.");
    // 
    // Make the console window stay open
    // so that you can see the results when running from the IDE.
    // 
    Console.WriteLine();
    Console.Write("Press Enter to finish ... ");
    Console.Read();
    					
  3. Сохраните приложение. Нажмите клавишу F5 чтобы скомпилировать и запустить приложение. Окон консоли должны отображаться примерно следующее:
    Объединение занял 6.208928 секунд.
    Построитель строк занял 0 секунд.

    Нажмите клавишу ENTER для завершения...
  4. Нажмите клавишу ВВОД, чтобы остановить выполнение приложения и закройте окно консоли.

Устранение неполадок

  • При работе в среде, поддерживающей потоковых данных, например в веб-формы ASPX или приложение записывает данные на диск, следует избегать переполнения буфера объединения или Класс StringBuilderи записи данных напрямую в поток через Response.Write метод или соответствующий метод для рассматриваемого потока.
  • Для повторного использования существующих Класс StringBuilder класса, а не каждый раз одно нужно перераспределение. Это ограничивает рост кучи и уменьшает мусора. В любом случае с помощью Класс StringBuilder класс позволяет более эффективно использовать кучи, чем при использовании оператора +.

Ссылки

В Класс StringBuilder класс содержит несколько методов для обработки на месте, не описанные в этой статье. Для получения дополнительных сведений поиск «StringBuilder» интерактивной справки.

Свойства

Код статьи: 306822 - Последний отзыв: 6 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Ключевые слова: 
kbsweptvs2008 kbhowtomaster kbperformance kbmt KB306822 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:306822

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com