Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 14.09.2009, 20:27
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 1  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
По умолчанию Производительность участка кода зависит от разной компоновки одного и того же?

Не раз уже сталкиваюсь со странными (для меня) явлениями в исполнении кода. Например, скорость исполнения участка кода зависит от последовательности его в этом самом коде (при этом параллельных операций, а-ля Loader'им картинку - не производится; общая нагрузка на процессор - так же стабильная).
Те же самые операторы +=, ++ ведут себя по разному для одних и тех же операций. При чем отклонения не пару миллисекунд, а сотни.

Примеры: здесь тестировался миф о том, что типизованный массив с фиксированной длиной исполняется быстрее:
Код AS3:
var v:Vector.<int> = new Vector.<int>();	var v:Vector.<int> = new Vector.<int>();
v[0] = 0;					v[0] = 0;
v.fixed = true;						
 
var t:int;					var t:int;
t = getTimer();					t = getTimer();
 
for (v[0] = 0; v[0] < 100000000; v[0]+=1) ;	for (v[0] = 0; v[0] < 100000000; v[0]+=1) ;
trace (getTimer() - t); //1206			trace (getTimer() - t); //1208
 
v.fixed = false;				v.fixed = true;
t = getTimer();					t = getTimer();
 
for (v[0] = 0; v[0] < 100000000; v[0]+=1) ;	for (v[0] = 0; v[0] < 100000000; v[0]+=1) ;
trace (getTimer() - t); //1243			trace (getTimer() - t); //1247
Что это? Кто первый тот и папа? ))


Или это:
Код AS3:
// пример №1
var n:Number = 1.13456;
var t:int;
 
t = getTimer();
 
for (var i:uint = 0; i<100000000; i+=1)
{
 n = Math.floor(n);
 n = 1.13456;
}
 
trace(getTimer()-t); //10289
t = getTimer();
 
for (var j:uint = 0; j<100000000; j+=1)
{
 n = n >> 0;
 n = 1.13456;
}
 
trace(getTimer()-t); //1860
 
===================================
 
// пример №2
var n:Number = 1.13456;
var t:int;
 
t = getTimer();
 
for (var i:uint = 0; i<100000000; i++)
{
 n = Math.floor(n);
 n = 1.13456;
}
 
trace(getTimer()-t); //10253
t = getTimer();
 
for (var j:uint = 0; j<100000000; j++)
{
 n = n >> 0;
 n = 1.13456;
}
 
trace(getTimer()-t); //1485
 
=====================================
 
// пример №3
"var n:Number = 1.13456;
var t:int;
 
t = getTimer();
 
for (var i:uint = 0; i<100000000; i++)
{
 n = Math.floor(n);
 n = 1.13456;
}
 
trace(getTimer()-t); //10192
t = getTimer();
 
for (var j:uint = 0; j<100000000; j+=1)
{
 n = n >> 0;
 n = 1.13456;
}
 
trace(getTimer()-t); //1328
Примеры тестировались не раз, погрешность -- незначительна. (на более слабых ПК погрешность увеличивается - но не суть, пропорция остается)
Как видите, от перекомпоновки операторов в счетчике цикла мы получаем разные значения для одних и тех же вычислений.
Это что ж получается -- "от перемены мест слагаемых сумма..." меняется ?


Последний раз редактировалось switcher!; 14.09.2009 в 20:29.
Создать новую тему   Часовой пояс GMT +4, время: 14:43.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:43.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.