C# - String.Replace vs Regex.Replace

Здравствуйте уважаемые читатели! Сегодня я расскажу какой способ замены строки более производителен.

Введение: Как-то программируя, мне надо было заменить символ пробела на слово "[space]" (без кавычек). Я знал 2 метода для реализаций данной задачи: String.Replace и Regex.Replace, но у меня возник вопрос: Какой из этих двух методов окажется более производителен (т.е. скорость выполнения операции замены строки будет короче) ?

Итак мы будет проводить Бенчмарк (Benchmark, т.е. тест производительности). Для этого воспользуемся методом Stopwatch.

"Stopwatch - набор методов и средств, которые можно использовать для точного измерения затраченного времени." - из MSDN.com

Объясню как будет происходить измерение времени выполнения кода: Мы инициализируем класс Stopwatch, потом перед кодом с замены строки запускаем измерение затраченного времени и после - останавливаем. Все просто.

Итак вот полноценный код:
namespace Replace
{
    using System;
    using System.Diagnostics;
    using System.IO;
    using System.Text.RegularExpressions;

    class Program
    {
        static void Main()
        {
            //Здесь текст считается с текстового файла
            string testText = File.ReadAllText(@"D:\Programming\C# Projects\2013\PowerCodX Blog\Replace Comparing\TestText2.txt");

            //Инициализация класса Stopwatch
            var watchString = new Stopwatch();
            //Запускаем измерение времени
            watchString.Start();
            /* Замена строки методом String.Replace.
             * Символ пробела меняется на "[space]"
             * Примечание: можно было и не инициализировать переменную так как она не используется в дальнейшим но
             * если вам понадобится использовать ее то я уже создал ее для вас ;)
             */
            var stringReplace = testText.Replace(" ", "[space]");
            watchString.Stop();
            Console.WriteLine("Elapsed Time:" + watchString.ElapsedTicks);

            // Не обращаем внимание, просто этот код переводится как двойное нажатие клавиши "Enter"
            Console.WriteLine("\r\n\r\n");

            //Здесь тоже самое но с методом Regex.Replace
            var watchRegex = new Stopwatch();
            watchRegex.Start();
            var regexReplage = Regex.Replace(testText, " ", "[space]");
            watchRegex.Stop();
            Console.WriteLine("Elapsed Time:" + watchRegex.ElapsedTicks);

            //Используется чтобы консольное приложение не закрывалось после выполнения инструкций.
            Console.ReadKey();

            /* 
             * Output: 
             * Elapsed Time: 41776 ticks
             * 
             * 
             * Elapsed Time: 620118 ticks
             */
        }
    }
}

Вот оно! String.Replace показал себя лучше чем Regex.Replace. Значит для простой замены надо использовать только String.Replace. Regex.Replace используется для других целей, но это уже не входит в эту статью.


Ну вот и все. Если заметили грамматические ошибки или работоспособность кода нарушена пишите в комментариях или на почту: powercodx@mail.ru
Автор: PowerCodX, 2013

Comentarii

  1. Titanium Ching - the ancient meaning of the word
    The first three names of the name and 2013 ford focus titanium hatchback origin of titanium wok the titanium element word is the spruce. They were originally a Germanic titanium jewelry for piercings name for titanium apple watch band an eagle-headed eagle, whose head was also a

    RăspundețiȘtergere

Trimiteți un comentariu

Postări populare de pe acest blog

[.NET] C# Разделить строку на слова

C# - Перемешать Массив

C# взаимодействие с сайтом