Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятные тормоза компиляции 
:(
    Опции темы
maxtech
Дата 25.11.2010, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 25.11.2010

Репутация: нет
Всего: нет



Есть небольшое тестовое приложение. Делал чтобы сравнить скорость процессоров.
В нем есть большая функция. Очень большая, 5000 строк примерно. (Сделал копипастом)
Есть кнопка, при нажатии которой запускается эта функция.

Тестирую на двух компах: 

1. AMD Athlon XP 3200+ (WinXP SP2)
2. Ноут на Intel P6100 (Win7 Ultimate)

Странность заключается в сильных тормозах, которые возникают при запуске на ноуте в случае если приложение компилируется в режиме optimize code (пишу на C#, .NET2.0). Судя по всему, тормоза возникают при JIT-компиляции большой функции. При отключенной оптимизации или при запуске в debug-режиме из студии таких тормозов нет. Также нет тормозов при запуске с других компов. Тормоза только на ноуте.


Код:

Код

    public partial class Form1 : Form
    {
        private bool doIt;

        public Form1()
        {
            InitializeComponent();
            int year = DateTime.Now.Year;
            doIt = year < 2010;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DateTime dtm = DateTime.Now;
            AddStr("button1_Click: Button press. Current time: " + dtm.ToLongTimeString());
            Application.DoEvents();
            Test();
            DateTime now = DateTime.Now;
            TimeSpan diff = now - dtm;
            AddStr("button1_Click: timediff=" + diff.ToString());
        }

        private void Test()
        {
            DateTime dtm = DateTime.Now;
            AddStr("Test: Function call. Current time: " + dtm.ToLongTimeString());
            Application.DoEvents();
            int st = Environment.TickCount;
            AddStr("Test: tickCount=" + st.ToString());
            Application.DoEvents();
            long sum = 0;
            int res = DateTime.Now.Millisecond;
            for (int i = 0; i < 500000000; i++)
            {
                if (doIt) // всегда false
                {
                    double a = 1 + res;
                    double b = 500;
                    double c = a * b + 555;
                    double e = c / b + 3;
// Этот блок повторяется много раз.
                    e += sum;
                    b -= e * res / a;
                    b += sum * e / res + a * c + c;
                    e -= b * 60 / a + b - c + e;
// \
                    res = (int)(a + b + c + e);
                }
                if (res > 1000)
                {
                    res -= 500;
                }
                else
                {
                    res += 500;
                }
                sum += res - 500;
            }
            int nst = Environment.TickCount;
            AddStr("Test: newTickCount=" + nst.ToString());
            st = nst - st;
            AddStr("Test: Time=" + st.ToString() + " x=" + sum.ToString());
        }


Результаты.

На ноуте P6100 в debug-режиме:

button1_Click: Button press. Current time: 13:39:33
Test: Function call. Current time: 13:39:34
Test: tickCount=5769369
Test: newTickCount=5771990
Test: Time=2621 x=146000000000
button1_Click: timediff=00:00:03.1356055


На том же ноуте при запуске .exe:


button1_Click: Button press. Current time: 13:40:00
Test: Function call. Current time: 13:42:25  (время между вызовом функции и входом в неё - 02:25 мин!)
Test: tickCount=5940362
Test: newTickCount=5942499
Test: Time=2137 x=150000000000
button1_Click: timediff=00:02:26.8742580


На Athlon XP 3200 (запуск .exe):

button1_Click: Button press. Current time: 13:47:04
Test: Function call. Current time: 13:47:04
Test: tickCount=22233453
Test: newTickCount=22237078
Test: Time=3625 x=312500000000
button1_Click: timediff=00:00:03.7656250


С чем это может быть связано?

Это сообщение отредактировал(а) maxtech - 25.11.2010, 15:25
PM MAIL   Вверх
jonie
Дата 25.11.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Ну собственно с JIT компиляцией... при дебаге оптимизация как я знаю не проводится jit компилером, в отличие от релиза.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
maxtech
Дата 25.11.2010, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 25.11.2010

Репутация: нет
Всего: нет



jonie,  тормоза возникают только при соблюдении двух условий одновременно: 
1. запуск exe 
2. На ноуте Intel P6100.

На Athlon 3200 таких тормозов нет. 
Я сейчас потестил экзешник на старом Duron 1100:

button1_Click: Button press. Current time: 15:17:54
Test: Function call. Current time: 15:17:54
Test: tickCount=10005796
Test: newTickCount=10013187
Test: Time=7391 x=242000000000
button1_Click: timediff=00:00:07.3906250

Компиляция меньше секунды. На новом P6100 более двух минут.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0424 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.