Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Почему упала производительность?


Автор: Ch0bits 26.12.2005, 18:48
У меня стоят две одинаковые системы WinXP Pro SP2. На одной установлена VS2005, а на другой только .NET Framework 2.
С одной из тем форума взял такую программу, кто автор не помню:
Код

using System;

    class CMain
    {
        static void Main()
        {
            Random rnd = new Random();
            double[,] mass = new double[801, 801];
            for (int i = 0; i < 801; i++)
            {
                for (int j = 0; j < 801; j++)
                {
                    mass[i, j] = 1.0 + rnd.NextDouble();
                }
            }
            double dat, dat2;
            Console.WriteLine("Starting.. Press <Enter>");
            Console.Read();
            DateTime dt1 = System.DateTime.Now;
            for (int b = 0; b < 801; b++)
            {
                for (int a = 0; a < 801; a++)
                {
                    for (int c = 1; c < 801; c++)
                    {
                        dat = mass[a, b];
                        dat2 = mass[c, b];
                        if (dat > dat2)
                        {
                            mass[a, b] = dat;
                            mass[c, b] = dat;
                        }
                    }
                }
            }
            DateTime dt2 = System.DateTime.Now;
            Console.WriteLine("Done");
            Console.WriteLine("Time: " + dt2.Subtract(dt1).ToString());
            Console.Read();
            Console.Read();
            return;
        }
    }


Чудеса заключаются в том, что время выполнения на системе:
1я система (VS2005 среда не запущена, профиль Release, выполнено 10 запусков) 12-13 сек
2я система (NET 2, выполнено 10 запусков) 6-7 сек

Комп Athlon 64 3400+ / 1Gb RAM без файла подкачки

Почему такая разница в скорости? И почему такая маленькая скорость?

Автор: Ch0bits 26.12.2005, 23:12
Сейчас совсем запутался. При компиляции из консоли с помощью csc получаются такие результаты:
.NET 1.1 время работы 8.3 сек +/- 0.2 сек
.NET 2 время работы 9.5 сек +/- 0.3 сек

Автор: mr.DUDA 27.12.2005, 08:47
Цитата(Vadim999 @ 26.12.2005, 17:48)
И почему такая маленькая скорость?

800 * 800 * 800 = 512.000.000
Вот столько итераций у второго цикла (сортирует он, что ли), а в цикле - помимо операций присваивания есть ещё оператор if, поэтому оптимизировать JIT-компилятору тут "некуда". Советую написать аналогичный код в чистом C++ и посмотреть, сколько времени уйдёт у него на выполнение. А почему на разных виндах и framework'ах разные результаты - леший его знает smile, по идее они не должны сильно отличаться (массив типизированный, никакие фичи второго дотнета не юзаются), но вот отличаются же...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)