Повторение 3D-списка против одного списка занимает в 10 раз больше времени - PullRequest
0 голосов
/ 08 апреля 2020

Я заметил большую разницу во времени, необходимого для итерации одного списка измерений против 3-мерного списка, даже если количество итераций одинаково.

Кажется, что итерация трехмерного списка занимает 10 раз до тех пор, пока существует одномерный список, и мне интересно, почему это происходит, потому что мне обычно нужно иметь данные в трехмерном списке

Можно ли как-то обойти это, используя списки измерений, как я?
Пример реального мира точно такой же, как этот пример ниже:

Итерации: 9256408 занял 116 миллисекунд (с использованием одномерного списка с benchmark1)
Итерации: 9256408 заняло 1199 миллисекунд (с использованием трехмерного списка измерений с эталоном 2)

new Thread(testbenchmark1).Start(); //Single List
new Thread(testbenchmark2).Start(); //3D List

        void testbenchmark1()
        {
            double a = 0; double b = 0; double c = 0; double d = 0; List<String> baseLIST = new List<String>(); List<int> valueLIST = new List<int>();
            List<List<int>> valueLIST2D = new List<List<int>>(); int iterations = 0;
            for (int i = 0; i < 56; i++)
            {
                baseLIST.Add(i.ToString());
            }
            for (int i = 0; i < 165293; i++)
            {
                valueLIST.Add(1);
            }

            Stopwatch stopWatch = new Stopwatch();
            stopWatch.Start();
            for (int i = 0; i < baseLIST.Count; i++) //56
            {
                //Now calculate the GINI index for this feature
                a = 0; b = 0; c = 0; d = 0;
                for (int t = 0; t < valueLIST.Count; t++) //165293
                {
                    a += 1;
                    b += 1;
                    c += 1;
                    d += 1;
                    iterations++;
                }
            }
            stopWatch.Stop();
            MessageBox.Show("Iterations: " + iterations + " took " + stopWatch.ElapsedMilliseconds.ToString() + " milliseconds");
        }
        void testbenchmark2()
        {
            double a = 0; double b = 0; double c = 0; double d = 0; List<String> baseLIST = new List<String>();
            List<List<List<int>>> valueLIST3D = new List<List<List<int>>>(); int iterations = 0;
            for (int i = 0; i < 56; i++)
            {
                baseLIST.Add(i.ToString());
                valueLIST3D.Add(new List<List<int>>());
                for (int i2 = 0; i2 < 165293; i2++)
                {
                    List<int> valueLIST = new List<int>(); for (int n = 0; n < 4; n++) { valueLIST.Add(0); }
                    valueLIST3D[valueLIST3D.Count - 1].Add(valueLIST);
                }
            }

            Stopwatch stopWatch = new Stopwatch();
            stopWatch.Start();
            for (int i = 0; i < baseLIST.Count; i++) //56
            {
                //Now calculate the GINI index for this feature
                a = 0; b = 0; c = 0; d = 0;
                for (int t = 0; t < valueLIST3D[i].Count; t++) //165293
                {
                    a += valueLIST3D[i][t][0];
                    b += valueLIST3D[i][t][1];
                    c += valueLIST3D[i][t][2];
                    d += valueLIST3D[i][t][3];
                    iterations++;
                }
            }
            stopWatch.Stop();
            MessageBox.Show("Iterations: " + iterations + " took " + stopWatch.ElapsedMilliseconds.ToString() + " milliseconds");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...