PDA

Просмотр полной версии : [Вопрос] Оптимизация SCM



vovandolg
14.08.2016, 02:09
При выполнении данного кода:


for (new i; i < 11; i++) SendClientMessage(playerid, -1, " ");

на слабых пк были замечены небольшие лаги,
видел тему где то по оптимизации такого кода да не могу найти,
возможно ли оптимизировать такой ужас?

Desulaid
14.08.2016, 02:16
http://pro-pawn.ru/showthread.php?10231

ziggi
14.08.2016, 02:33
Лаги на клиенте или на сервере? Если на клиенте, то никакие серверные оптимизации не помогут и проблема, скорее всего, в другом месте.

vovandolg
14.08.2016, 02:44
Лаги на клиенте или на сервере? Если на клиенте, то никакие серверные оптимизации не помогут и проблема, скорее всего, в другом месте.

Да я как бы заметил это у всех, этот цикл в коннекте у меня,
при коннекте кроме подгрузки около 30 библиотек анимаций
и этого цикла особого не чего такого нету чтобы издавало мелкий поток лага.
Возможно поток музыки из интернета ещё, но он же 1 раз вызывается не 11 и не 30 раз как циклы...

Вот код допустим(Pawn.CMD + sscanf2):
https://pp.vk.me/c631828/v631828248/3d077/wIKPAMlQg6w.jpg
Вот что пишет при исполнении кода на сервере:


[01:29:13] [debug] Run time error 5: "Invalid memory access"
[01:29:13] [debug] AMX backtrace:
[01:29:13] [debug] #0 0003a66c in public pc_cmd_cc2 () at D:\Program\pawno\beta51.pwn:3981

А в чате пишет черным шрифтом в каждом сообщении SSCANF_OnGameModeInit

ziggi
14.08.2016, 03:54
Да я как бы заметил это у всех, этот цикл в коннекте у меня,
при коннекте кроме подгрузки около 30 библиотек анимаций
и этого цикла особого не чего такого нету чтобы издавало мелкий поток лага.

И ты почему-то решил, что проблема в SendClientMessageToAll? Очевидно же, что проблема именно в подгрузке анимаций. Можешь использовать fixes.inc (http://pro-pawn.ru/showthread.php?14040-fixes-inc-%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B1%D0%B0%D0%B3%D0%BE%D0%B2-SA-MP/), там подгрузка сделана более грамотно(функция для игрока вызывается дважды, если её вызывают первый раз).

И да, как я писал выше: никакие оптимизации этой функции на сервере никак не повлияют на производительность на клиенте.

vovandolg
14.08.2016, 04:21
Ну всё равно на сервере эта оптимизация не помешает, проблему бы только помог кто решить

123
14.08.2016, 09:14
http://pro-pawn.ru/showthread.php?10231

Ух ты, сколько пикосекунд сэкономил благодаря этому чуду? 0.5? Точно не берусь утверждать, но скорее всего игроки начнут аплодировать стоя, благодаря такой оптимизации, ведь все лаги исчезнут раз и навсегда!

Sp1ke
14.08.2016, 09:44
Ух ты, сколько пикосекунд сэкономил благодаря этому чуду? 0.5? Точно не берусь утверждать, но скорее всего игроки начнут аплодировать стоя, благодаря такой оптимизации, ведь все лаги исчезнут раз и навсегда!

Похоже ты используешь свой метод - "работает, да и ладно". Я уверен, что та тема была создана для демонстрации одного из вариантов оптимизации кода, а не для одноразового использования очищения чата

Profyan
14.08.2016, 09:50
Похоже ты используешь свой метод - "работает, да и ладно". Я уверен, что та тема была создана для демонстрации одного из вариантов оптимизации кода, а не для одноразового использования очищения чата

Если на то пошло,то давайте тогда везде,где есть циклы,будем юзать #emit,чтобы вдруг не использовать одну инструкцию несколько раз.

ziggi
14.08.2016, 10:11
Ну всё равно на сервере эта оптимизация не помешает, проблему бы только помог кто решить

Я уже написал решение.

123
14.08.2016, 11:19
И ты почему-то решил, что проблема в SendClientMessageToAll? Очевидно же, что проблема именно в подгрузке анимаций. Можешь использовать fixes.inc (http://pro-pawn.ru/showthread.php?14040-fixes-inc-%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B1%D0%B0%D0%B3%D0%BE%D0%B2-SA-MP/), там подгрузка сделана более грамотно(функция для игрока вызывается дважды, если её вызывают первый раз).

И да, как я писал выше: никакие оптимизации этой функции на сервере никак не повлияют на производительность на клиенте.

Да, наверно вариант с fixes.inc самый правильный, поскольку только он помогает избежать пролага при погрузки анимаций. Но тем не менее он и самый объемный (да и получаем небольшую, но видимую заддержку при первом использовании функции).

vovandolg
14.08.2016, 11:58
Вот вы заладили)) я уже поставил вариант с инклуда ziggi,
вопрос темы остался с оптимизацией цикла сообщений и на полигон бежать тестировать:crazy:

Daniel_Cortez
14.08.2016, 13:44
https://pp.vk.me/c631828/v631828248/3d077/wIKPAMlQg6w.jpg
Вот что пишет при исполнении кода на сервере:


[01:29:13] [debug] Run time error 5: "Invalid memory access"
[01:29:13] [debug] AMX backtrace:
[01:29:13] [debug] #0 0003a66c in public pc_cmd_cc2 () at D:\Program\pawno\beta51.pwn:3981

А в чате пишет черным шрифтом в каждом сообщении SSCANF_OnGameModeInit
Исправил, проверьте ещё раз ту тему с командой. Проблема была из-за бага в компиляторе, я подробно описал его здесь (http://pro-pawn.ru/showthread.php?10231&p=76282&viewfull=1#post76282).

vovandolg
14.08.2016, 14:15
DC, а можно ли как то такую оптимизацию применить к SendClientMessage(playerid, 0, str);?

Daniel_Cortez
14.08.2016, 15:01
DC, а можно ли как то такую оптимизацию применить к SendClientMessage(playerid, 0, str);?
Можно, но смысл? Вам уже отвечали ранее, в лучшем случае сэкономите пару микросекунд, может даже меньше. Та команда была всего лишь примером микрооптимизации, не более того.

vovandolg
14.08.2016, 15:12
Можно, но смысл? Вам уже отвечали ранее, в лучшем случае сэкономите пару микросекунд, может даже меньше. Та команда была всего лишь примером микрооптимизации, не более того.

Ну всё равно интересно, можно пример?:grin: