Информация об изменениях

Сообщение Re[8]: Производительность при поиске символа в строке C# от 31.03.2015 18:43

Изменено 31.03.2015 18:46 koandrew

Здравствуйте, Jack128, Вы писали:

J>выделенное очень спорно. я бы вообще сказал, что на любых строках второй вариант будет медленнее третьего (без лока)

Да, вы правы. Я только что проверил:
  Код
class Program
    {

        private static int Method1(string str, char symbol)
        {
            var result = 0;
            str.AsParallel().ForAll(x =>
            {
                if (x == symbol)
                {
                    Interlocked.Add(ref result, 1);
                    //result++;
                }
            });
            return result;
        }

        private static int Method2(string str, char symbol)
        {
            var result = 0;
            Action<char> lambda = x =>
            {
                if (x == symbol)
                {
                    //Interlocked.Add(ref result, 1);
                    result++;
                }
            };
            foreach (var @char in str)
            {
                lambda(@char);
            }
            return result;
        }

        static void Main(string[] args)
        {
            string str = File.ReadAllText("Толстой Лев. Война и мир. Том 1 - royallib.ru.txt");
            var res1 = Method1(str, 'a');
            var res2 = Method2(str, 'a');
            var sw = new Stopwatch();

            sw.Restart();
            res1 = Method1(str, 'a');
            sw.Stop();
            Console.WriteLine("Result {0}, time {1}", res1, sw.ElapsedMilliseconds);
            sw.Restart();
            res2 = Method2(str, 'a');
            sw.Stop();
            Console.WriteLine("Result {0}, time {1}", res1, sw.ElapsedMilliseconds);
            //1.ToString();
        }
    }

Заодно выяснил, что в тексте первого тома "Войны и мир" английская буква "а" встречается ровно 1920 раз
Re[8]: Производительность при поиске символа в строке C#
Здравствуйте, Jack128, Вы писали:

J>выделенное очень спорно. я бы вообще сказал, что на любых строках второй вариант будет медленнее третьего (без лока)

Да, вы правы. Я только что проверил:
  Код
class Program
    {

        private static int Method1(string str, char symbol)
        {
            var result = 0;
            str.AsParallel().ForAll(x =>
            {
                if (x == symbol)
                {
                    Interlocked.Add(ref result, 1);
                    //result++;
                }
            });
            return result;
        }

        private static int Method2(string str, char symbol)
        {
            var result = 0;
            Action<char> lambda = x =>
            {
                if (x == symbol)
                {
                    //Interlocked.Add(ref result, 1);
                    result++;
                }
            };
            foreach (var @char in str)
            {
                lambda(@char);
            }
            return result;
        }

        static void Main(string[] args)
        {
            string str = File.ReadAllText("Толстой Лев. Война и мир. Том 1 - royallib.ru.txt");
            var res1 = Method1(str, 'a');
            var res2 = Method2(str, 'a');
            var sw = new Stopwatch();

            sw.Restart();
            res1 = Method1(str, 'a');
            sw.Stop();
            Console.WriteLine("Result {0}, time {1}", res1, sw.ElapsedMilliseconds);
            sw.Restart();
            res2 = Method2(str, 'a');
            sw.Stop();
            Console.WriteLine("Result {0}, time {1}", res1, sw.ElapsedMilliseconds);
            //1.ToString();
        }
    }

Result 1920, time 9
Result 1920, time 2


Заодно выяснил, что в тексте первого тома "Войны и мир" английская буква "а" встречается ровно 1920 раз