Ответы с форумов MSDN

Производительность string.Join в .NET

Date: 16.10.2017 17:34:02

По моим тестам, при входном наборе из 150000 случайных чисел от 0 до 100, время выполнения:

Цикл: 32 ms

Метод String.Join: 16 ms

Вывод результата (при выводе в консоль): 14000 ms

Вывод результата (при перенаправлении стандартного вывода в файл): 6 ms

В общем, нужно чуть больше информации, в каком именно окружении запускается программа, чтобы ответить на этот вопрос.

Edit: единственное, что я изменил это current.Substring(0, 1) == "+" заменил на current[0] == '+' , выиграло всего ~3 ms 

Вот код с измерениями:

static void Main(string[] args)
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();
            long t1, t2;

            t1 = sw.ElapsedMilliseconds;
            List<int> introw = new List<int>();
            List<int> intresult = new List<int>();
            
            int min = 0;
            int x = 0;
            int n = int.Parse(Console.ReadLine());
            

            t2 = sw.ElapsedMilliseconds ;
            Console.WriteLine("Init: " + (t2 - t1).ToString() + "ms");

            t1 = sw.ElapsedMilliseconds;
                      
            

            for (int i = 0; i < n; i++)
            {
                string current = Console.ReadLine();


                if (current[0] == '+')
                {
                    x = int.Parse(current.Substring(1, current.Length - 1));
                    introw.Add(x);
                    if (x == min)
                    {
                        while (introw.Contains(min))
                        {
                            min++;
                        }
                    }
                }
                else
                {
                    x = int.Parse(current.Substring(1, current.Length - 1));
                    introw.Remove(x);
                    if (x < min)
                    {
                        if (introw.Contains(x) == false)
                        {
                            min = x;
                        }
                    }
                }
                intresult.Add(min);
            }

            t2 = sw.ElapsedMilliseconds;
            Console.WriteLine("Loop: " + (t2 - t1).ToString() + "ms");

            t1 = sw.ElapsedMilliseconds;
            string str = String.Join(" ", intresult);
            t2 = sw.ElapsedMilliseconds;
            Console.WriteLine("Join: " + (t2 - t1).ToString() + "ms");

            t1 = sw.ElapsedMilliseconds;
            Console.WriteLine(str);
            t2 = sw.ElapsedMilliseconds;
            Console.WriteLine("Out: " + (t2 - t1).ToString() + "ms");

            Console.ReadLine();



Автор: VadimTagil

Главная страница - Список тем - Репозиторий на GitHub