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

Сообщение Re[25]: [performance] чего-то я не понимаю в этой жизни от 03.07.2022 15:44

Изменено 03.07.2022 18:22 rg45

Re[25]: [performance] чего-то я не понимаю в этой жизни
Здравствуйте, rudzuk, Вы писали:

R>Я в этом даже не сомневаюсь. Интересно другое: а если и на шарпе использовать ParseInt?


Тогда C# снова обгоняет плюсы. Примерно 750 мс (C#) против 850 мс (C++). Процедуры ParseInt в плюсах и в шарпе идентичны с поправкой на синтаксис.

  C# 750 ms
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;

namespace ParseIntCodealot
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var vals = new string[0x4000_000];

            var watch = Stopwatch.StartNew();
            var random = new Random(DateTime.Now.Second);
            for (var i = 0; i < vals.Length; i++)
            {
                vals[i] = random.Next().ToString();
            }

            watch.Stop();
            Console.WriteLine($"Init: {watch.Elapsed.TotalSeconds}");

            TestPerformanceManaged(vals);
        }

        static void TestPerformanceManaged(string[] vals)
        {
            var watch = Stopwatch.StartNew();

            var res = 0L;

            foreach (var val in vals)
            {
                //var num = int.Parse(val);
                var num = ParseInt(val);
                res ^= num.GetHashCode();
            }

            Console.WriteLine("Hash = {0:X}", res);

            watch.Stop();
            Console.WriteLine($"TestPerformanceManaged: {watch.Elapsed.TotalSeconds}");
        }

        static int ParseInt(string val)
        {
            int res = 0;
            foreach (var d in val)
            {
                if ('0' <= d && d <= '9')
                {
                    res = res * 10 + d - '0';
                }
                else
                {
                    throw new ArgumentOutOfRangeException("'" + d + "': Symbol is out of the range");
                }
            }
            return res;
        }
    }
}


Вот такая херь, мальчики и девочки
Подрыв Устоев и Обвал Покоев
Че-то, у меня мотивация пропала какие-то паринги писать после этого.
Re[25]: [performance] чего-то я не понимаю в этой жизни
Здравствуйте, rudzuk, Вы писали:

R>Я в этом даже не сомневаюсь. Интересно другое: а если и на шарпе использовать ParseInt?


Тогда C# снова обгоняет плюсы. Примерно 750 мс (C#) против 850 мс (C++). Процедуры ParseInt в плюсах и в шарпе идентичны с поправкой на синтаксис.

  C# 750 ms
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;

namespace ParseIntCodealot
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var vals = new string[0x4000_000];

            var watch = Stopwatch.StartNew();
            var random = new Random(DateTime.Now.Second);
            for (var i = 0; i < vals.Length; i++)
            {
                vals[i] = random.Next().ToString();
            }

            watch.Stop();
            Console.WriteLine($"Init: {watch.Elapsed.TotalSeconds}");

            TestPerformanceManaged(vals);
        }

        static void TestPerformanceManaged(string[] vals)
        {
            var watch = Stopwatch.StartNew();

            var res = 0L;

            foreach (var val in vals)
            {
                //var num = int.Parse(val);
                var num = ParseInt(val);
                res ^= num.GetHashCode();
            }

            Console.WriteLine("Hash = {0:X}", res);

            watch.Stop();
            Console.WriteLine($"TestPerformanceManaged: {watch.Elapsed.TotalSeconds}");
        }

        static int ParseInt(string val)
        {
            int res = 0;
            foreach (var d in val)
            {
                if ('0' <= d && d <= '9')
                {
                    res = res * 10 + d - '0';
                }
                else
                {
                    throw new ArgumentOutOfRangeException("'" + d + "': Symbol is out of the range");
                }
            }
            return res;
        }
    }
}


Этот же пример на С++ для сравнения здесь: http://rsdn.org/forum/cpp/8307046.1
Автор: rg45
Дата: 02.07.22


Вот такая херь, мальчики и девочки
Подрыв Устоев и Обвал Покоев
Че-то, у меня мотивация пропала какие-то паринги писать после этого.