Портал игровых серверов GMNET.RU - ArmA2.RU
spacerspacer Главная spacerspacer Форум spacerspacer Игровые Сервера spacerspacer Правила Игровых Серверов spacerspacer
Старый 24.10.2013, 23:04   #1
Prodavec
Подполковник
 
Аватар для Prodavec
 
Регистрация: 23.07.2009
Сообщений: 2,358
Сказал cпасибо: 268
Поблагодарили 915 раз в 549 сообщениях
Заметки по производительности.

Тема предназначена для различных заметок на тему производительности скриптов, каких-то измерений и т.п.

Для начала [Только зарегистрированные и активированные пользователи могут видеть ссылки. ]

Ремарка о switch
На wikipedia [Только зарегистрированные и активированные пользователи могут видеть ссылки. ]:
Цитата:
If you can't escape this using a switch control structure, then try and rethink the functionality. Especially if only one option is needed to match.

On the other hand switch is slower than if then else. To keep tidiness of the switch and speed of if, use if exitWith combined with call:
Код:
call {
	if (cond1) exitWith {//code 1};
	if (cond2) exitWith {//code 2};
	if (cond3) exitWith {//code 3};
	//default code
};
Однако со switch не всё так однозначно.


Где var - переменная, value, value1, value2 - значения переменной var

Проверка производительности считается следующим алгоритмом:

Код:
_t0 = diag_tickTime;

for "_i" from 0 to 999999 step 1 do
{
    // some piece of code to test
};

diag_log format ["Execution Time: %1", diag_tickTime - _t0];
То есть выполняется миллион итераций самым быстрым типом цикла.

И вот какие результаты

1.
Код:
switch (value) do
{
    case value1:
    {

    };
    case value2:
    {

    };
};
Цитата:
"switch (value) do {case value: {...};}; | Execution Time: 38.939"
2.
Код:
switch (true) do
{
    case (var == value1):
    {

    };
    case (var == value2):
    {

    };
};
Цитата:
"switch (true) do {case (var == value): {...};}; | Execution Time: 62.375"
и предлагаемый вариант с if:
3.
Код:
call
{
    if (var == value1) exitWith
    {

    };
    if (var == value1) exitWith
    {

    };
};
Цитата:
"call {if (var == value) exitWith {...};}; | Execution Time: 48.8071"
if (condition) then {...} является быстрее на ~22% ((62.375 - 48.8071) / 62.375) switch только если используется switch (true) do {...}, но если используется switch (value) do {...} то switch быстрее if (condition) then {...} на ~20% ((48.8071 - 38.939) / 48.8071)
Вложения
Тип файла: zip switch.zip (859 байт, 4 просмотров)

Последний раз редактировалось Prodavec; 24.10.2013 в 23:06.
Prodavec вне форума   Ответить с цитированием
Старый 25.10.2013, 04:58   #2
Ognahs
Младший сержант
 
Аватар для Ognahs
 
Регистрация: 16.03.2013
Сообщений: 143
Сказал cпасибо: 8
Поблагодарили 15 раз в 13 сообщениях
Цитата:
Сообщение от njnj Посмотреть сообщение
наверное на ХАБРЕ тебе быстрее помогут .
По моему это тебе помощь нужна, потому как автор темы пишет об особенностях производительности разных конструкций в программировании, а не просит ему в чем то помочь.
Ognahs вне форума   Ответить с цитированием
Старый 26.10.2013, 03:35   #3
njnj
Сержант
 
Регистрация: 22.02.2010
Сообщений: 193
Сказал cпасибо: 17
Поблагодарили 93 раз в 57 сообщениях
по моему есть проверенные решения и тамочи все уже разжевано .
ВООБЩЕ К ЧЕМУ ТВОЕ ЗАМЕЧАНИЕ (ФЛУДИМ ) ?
если я правильно понял вот это вы хотите = [Только зарегистрированные и активированные пользователи могут видеть ссылки. ]
лучше конечно конкретную задачу обрисовать в вашей инторпритации именно там .

Последний раз редактировалось njnj; 26.10.2013 в 03:49.
njnj вне форума   Ответить с цитированием
Старый 27.10.2013, 06:11   #4
njnj
Сержант
 
Регистрация: 22.02.2010
Сообщений: 193
Сказал cпасибо: 17
Поблагодарили 93 раз в 57 сообщениях
[Только зарегистрированные и активированные пользователи могут видеть ссылки. ]
njnj вне форума   Ответить с цитированием
Старый 12.04.2015, 07:19   #5
Dimon UA
Лейтенант
 
Аватар для Dimon UA
 
Регистрация: 16.10.2008
Адрес: Лисичанск-Москва-Севастополь
Сообщений: 1,236
Сказал cпасибо: 1,411
Поблагодарили 1,879 раз в 955 сообщениях
Цитата:
Сообщение от Prodavec Посмотреть сообщение

1.
Код:
switch (value) do
{
    case value1:
    {

    };
    case value2:
    {

    };
};


Скрытый текст

2.
Код:
switch (true) do
{
    case (var == value1):
    {

    };
    case (var == value2):
    {

    };
};


и предлагаемый вариант с if:
3.
Код:
call
{
    if (var == value1) exitWith
    {

    };
    if (var == value1) exitWith
    {

    };
};
[свернуть]
Некорректное сравнение.
Код:
switch (value) do
{
    case value1:
    {

    };
    case value2:
    {

    };
};
надо сравнивать с
Код:
_arr = [
	value1,{},
	value2,{}
];
call (_arr select ((_arr find value) + 1));
Dimon UA вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Быстрый переход


Текущее время: 10:15. Часовой пояс GMT +3.

Powered by vBulletin®
Copyright ©2000 - 2018, vBulletin Solutions, Inc.

GMNET.RU © 2003-2018 || Дизайн студии vR