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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.05.2014, 04:52
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 31  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
in4core, I4Logger? Я почитал статью, но там ничего про log level нет.
__________________
There is no thing in this world that is not simple.

Старый 27.05.2014, 08:36
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 32  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
По-моему где-то даже здесь на форуме была тема, где обсуждалось что лучше, побитовый сдвиг или деление по модулю в этом случае. Кто-то даже проводил тесты, и оказывалось, что деление по модулю в as3 быстрее.
Не смог найти ту тему, но если кому-то не в лом (мне в лом)) неплохо было бы провести тесты, чтобы проверить, а что на самом деле быстрее в as3
__________________
Ко мне можно и нужно обращаться на ты)

Старый 27.05.2014, 11:31
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 33  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
На самом деле разницы почти нет, вот один из тестов ( хром ):

Код:
Player: 
Player type: PlugIn / release /


version: WIN 13,0,0,214



Test: su.fishr.tasks::BitwiseVsDivision



length array: 100 000 000

// x % 2
method:  modulo,  duration : 2 353 ms 
// x * .5
method:  multiplyByHalf,  duration : 1 104 ms 
// x / 2
method:  divideIntoTwo,  duration : 1 101 ms 
// x >> 1
method:  bitwiseRigthShift,  duration : 1 113 ms 



...end test

тестовый класс

Код AS3:
 
///********************************************************************
///* Copyright © 2014 fishr (fishr.flash@gmail.com)  
///********************************************************************
 
 
package su.fishr.tasks 
{
 
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.globalization.NumberFormatter;
	import flash.utils.getTimer;
	import su.fishr.utils.ITask;
 
 
 
	/**
	 * ...
	 * @playerversion          Flash 10.1
	 * @langversion            3.0
	 * @author                 fishr
	 * @created                5/27/2014 
	 * @since                  5/27/2014 
	 */
	public  class BitwiseVsDivision extends EventDispatcher implements ITask
	{
	/**-------------------------------------------------------------------------------
	* 
	*	   						V A R I A B L E ' S 	
	* 
	* --------------------------------------------------------------------------------
	*/
	//{
		static private const AUTHOR:String = "fishr (fishr.flash@gmail.com)";
		static public const TEST_COMPLETE:String = "testComplete";
		private var _valueData:Number = 100000000;
		private var _taskName:String;
		private var _result:String;
		private var _numFormater:NumberFormatter;
 
	//}
 
	/**-------------------------------------------------------------------------------
	* 
	*	 						P R O P E R T I E S 	
	* 
	* --------------------------------------------------------------------------------
	*/
	//{
		/* INTERFACE su.fishr.utils.ITask */
 
		public function get result():String 
		{
			return _result;
		}
 
		public function get taskName():String 
		{
			return _taskName;
		}
 
		public function get valueData():Number 
		{
			return _valueData;
		}
 
		public function set numberFormater(value:NumberFormatter):void 
		{
			_numFormater = value;
		}
 
	//}
	/**-------------------------------------------------------------------------------
	* 
	*								P U B L I C 	
	* 
	* --------------------------------------------------------------------------------
	*/
	//{
 
 
 
 
 
 
 
		public function start(valData:Number = 0):void 
		{
			if ( valData ) _valueData = valData;
 
			var arr:Array = new Array();
 
			while( arr.length < _valueData )
			{
				arr.push( arr.length + 2);
			}
 
 
 
			const methods:Array/*String*/ = [ "bitwiseRigthShift",
															"divideIntoTwo",
															"multiplyByHalf",
															"modulo" ];
 
			var length:int = arr.length;
 
 
			const lenghtStr:String = _numFormater.formatInt( length);
 
 
			_result = "length array: " + lenghtStr + "\r\r";
 
			var startTime:int;
			var finishTime:int;
 
			var i:uint = methods.length;
			while ( i-- )
			{
				startTime = getTimer();
				this[ methods[ i ] ]( arr );
				finishTime = getTimer();
 
				const time:String = 
				_result += "method:  " +  methods[  i  ] + ",  duration : " + (  _numFormater.formatInt( ( finishTime - startTime ) ) ) + " ms \r";
 
			}
 
			_result += "\r...end test";
 
			this.dispatchEvent( new Event( TEST_COMPLETE ) );
		}
	//}
 
	/**-------------------------------------------------------------------------------
	* 
	*								P R I V A T E 	
	* 
	* --------------------------------------------------------------------------------
	*/	
	//{
		private function bitwiseRigthShift( arr:Array/*int*/ ):void
		{
			var h:uint = arr.length;
			while ( h-- )
			{
				const res:int = arr[ h ] >> 1;
			}
		}
 
		private function divideIntoTwo( arr:Array/*int*/ ):void
		{
			var h:uint = arr.length;
			while ( h-- )
			{
				const res:int = arr[ h ] / 2;
			}
		}
 
		private function multiplyByHalf( arr:Array/*int*/ ):void
		{
			var h:uint = arr.length;
			while ( h-- )
			{
				const res:int = arr[ h ] *.5;
			}
		}
 
		private function modulo( arr:Array/*int*/ ):void
		{
			var h:uint = arr.length;
			while ( h-- )
			{
				const res:int = arr[ h ] % 2;
			}
		}
	//}
 
 
	}
 
}
SimpleTasksTester.swf   (34.5 Кб)
Вложения
Тип файла: swf SimpleTasksTester.swf (34.5 Кб, 48 просмотров)


Последний раз редактировалось fish_r; 27.05.2014 в 12:24.
Старый 27.05.2014, 11:39
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 34  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Эти тесты были актуальны на начало 2007 года, оттуда и все статьи про простейшие оптимизульки математических выражений пошли. Сейчас, как я понимаю, компилятор сам оптимизирует как надо. Исходя из этого код нужно писать так, чтобы он был понятен и человеку в том числе без насилований его мозга.
__________________
тут я

Старый 27.05.2014, 11:47
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 35  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Меж тем >> 1 ещё и округляет.
Если не нужно округление – *0.5, если нужно – то >> 1 выглядит секси.

Старый 27.05.2014, 12:18
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 36  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
однако, если делимое имеет десятичную часть, то почему-то появляется разница, и она не в пользу сдвига, это у меня проявляется в хроме, только, но другие плеера дебаг-типа, поэтому не очень доверяю результату в них

Код:
Player: 
Player type: PlugIn / release /
version: WIN 13,0,0,214

Test: su.fishr.tasks::BitwiseVsDivision

length array: 100 000 000

method:  modulo,  duration : 2 306 ms 
method:  multiplyByHalf,  duration : 1 015 ms 
method:  divideIntoTwo,  duration : 1 062 ms 
method:  bitwiseRigthShift,  duration : 2 200 ms 

...end test
SimpleTasksTester.swf   (34.5 Кб)
Вложения
Тип файла: swf SimpleTasksTester.swf (34.5 Кб, 47 просмотров)

Старый 27.05.2014, 12:26
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 37  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Всем спасибо, но лучше дайте ссыль, где можно почитать про log level? Что это и зачем?

Добавлено через 24 минуты
Цитата:
однако, если делимое имеет десятичную часть, то почему-то появляется разница, и она не в пользу сдвига
На сообщение выше
Цитата:
Меж тем >> 1 ещё и округляет.
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 27.05.2014 в 12:51.
Старый 27.05.2014, 13:53
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 38  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
в тестовом классе, посмотри, результат сообщается переменной типа int, т.е. десятичная часть отсекается полюбе, просто неявно, поэтому выражение int(x/2 ) будет "дешевле" чем x>>1


Последний раз редактировалось fish_r; 27.05.2014 в 14:10.
Старый 27.05.2014, 22:13
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 39  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Цитата:
Всем спасибо, но лучше дайте ссыль, где можно почитать про log level? Что это и зачем?
http://ru.wikipedia.org/wiki/Syslog - основа основ. Там нет упоминания термина level, есть severity и facility. Понятие level относится в основном к дебагу: чем выше уровень, тем больше сообщений будет выводиться в лог. Впрочем, есть еще такое понятие, как verbose .
Собственно, нужно все это, очевидно, для того, чтобы оперативно выявлять проблемы в работе приложения, регулируя информативность логов в нужную сторону, по обстоятельствам, а также для того, чтобы иметь возможность автоматизировать процесс обработки логов. В некоторых системах библиотеках логирования существует более развернутые схемы настроек, например.
Есть и что-то по-легче (но не менее привлекательные по другим причинам, компактность, скажем). Так же некоторые фреймворки обладают собственными логгерами (внезапно). Разнообразие их довольно обширно.

Иногда, разработчики пишут логгеры самостоятельно .


Последний раз редактировалось alexcon314; 27.05.2014 в 22:57.
Старый 28.05.2014, 00:16
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 40  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Спасибо за объяснение, теперь понятно.
Это цвет, плавно уходящий из синего к красному, тоесть LogLevel.FATAL будет красным рисовать, и отображать даже в режиме paused Но мне это не нужно, к сожалению. У меня цвета рассчитаны для отделения одной части приложения от другой. Могу сделать самый простой лог-левел, состоящий из 2-х типов, такой да, пригодится.
__________________
There is no thing in this world that is not simple.

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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