Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Улучшение производительности кода - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

  • (9 Страниц) +
  • 1
  • 2
  • 3
  • 4
  • Последняя »
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Урок ]
Улучшение производительности кода Различные способы
Оценка: -----

#11
Пользователь офлайн   Sound 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияVVWVV (09 Сентябрь 2016 - 19:10) писал:

...

Добавил в: Мелочи на которые стоит обращать внимание

Просмотр сообщенияkrutoy.krosch (09 Сентябрь 2016 - 17:25) писал:

обычно делают так
if(tp == pickupid)
{
SetPlayerPos(playerid, 0, 0, 0);
}
if(tp1 == pickupid)
{
SetPlayerPos(playerid, 0, 0, 0);
}



а можно создать массив
new Float:tp[2][3] = 
{
{0, 0, 0},
{0, 0, 0}
}


и уже просто писать такой код в паблике пикапов
SetPlayerPos(playerid, tp[pickupid][0],  tp[pickupid][1],  tp[pickupid][2]);
удобней что ли))


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

И по поводу предложений:
Подобный первый способ предложил ранее Nexius.

Про второй способ: Добавлю, но исправлю его полностью, объясню: Этим способом мы скорее потратим производительность и ресурсы, а также, по твоему способу, словим выход за пределы массива.

Можно было бы использовать такой способ:
new Float:PlayerPickupUp[][] =
{
	{124.10, 488.31, 5.32},
	{340.10, 423.11, 9.42},
	{891.10, 678.31, 12.124},
	{112.10, 2678.31, -5.32},
	{561.10, 424.31, 15.81},
	{189.10, 343.31, 35.56}
};

public OnPlayerPickUpPickup(playerid, pickupid)
{

	if(pickupid >= EnterHouse && pickupid <= EnterHouse2)
            SetPlayerPos(playerid, PlayerPickupUp[pickupid][0], PlayerPickupUp[pickupid][1], PlayerPickupUp[pickupid][2]);
}
И создавать пикапы таким способом
EnterHouse = CreatePickup(...);
CreatePickup(...);
CreatePickup(...);
CreatePickup(...);
CreatePickup(...);
EnterHouse2 = CreatePickup(...);


Но это опять же глупо, ведь в частых случаях нужно присваивать и интерьер и угол поворота и, возможно, виртуальный мир. Не смотря на это ID пикапа может начинаться от 40 и до 45, а в массивах мы обращаемся с 0.
Конечно можно было бы зависать всё в один массив и через цикл находить нужную ячейку - но это опять же ради удобства, а не производительности, в общем, пример плохой, а метод бывает полезным и удобным

Сообщение отредактировал Sound: 10 Сентябрь 2016 - 07:25

0

#12
Пользователь офлайн   m1n1vv 

  • Искусственный Cверхинтеллект
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияUkrainian (09 Сентябрь 2016 - 16:33) писал:

Красава, +
Думаю если MAX_PLAYERS = 100. То char можно использовать у всех случаях с MAX_PLAYERS.
Но опять же, если мы устанавливаем MAX_PLAYERS = 100 то будут проблемы и с
new player_Skin[MAX_PLAYERS char]; /* Это не верно! */
/* Если мы будем приравнивать значения ID'а скина, то в конечном итоге получим проблемы, а не оптимизацию */

Если скинов 311 а MAX_PLAYERS = 100
Или я всё таки в чем то и ошибаюсь

char делает лимит не на количество ячеек, playerid, а на максимально значение, которое может хранить ячейка. 0..255.
new
    test[MAX_PLAYERS char];

test{856} = 145; // Верно
test{45} = 388; // Не верно

Сообщение отредактировал m1n1vv: 10 Сентябрь 2016 - 08:08

0

#13
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
По большей части в теме присутствует микрооптимизация, от которой в SA-MP мало пользы (очень немногие системы вызываются настолько часто, что ваши попытки ускорить код начнут приносить ощутимый результат). Тут вы лишь больше запутываете новичков, имхо.

Если и хочешь поговорить об оптимизации, расскажи (если знаешь, конечно) как ту же проверку на дом, где по 1000 раз подряд вызывается IsPlayerInRangeOfPoint для сверки координат, оптимизировать. Вот она действительно сильно режет производительность, ибо каждое нажатие на кнопку вызывает тайме с этим IsPlayerInRangeOfPoint. Оптимизировать её можно. И не только её. А текущая тема в большинстве своём содержит реализации, которые никак не повлияют на работу сервера, а лишь запутают людей :facepalm:
0

#14
Пользователь офлайн   krutoy.krosch 

  • Banned
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (10 Сентябрь 2016 - 08:53) писал:

По большей части в теме присутствует микрооптимизация, от которой в SA-MP мало пользы (очень немногие системы вызываются настолько часто, что ваши попытки ускорить код начнут приносить ощутимый результат). Тут вы лишь больше запутываете новичков, имхо.

Если и хочешь поговорить об оптимизации, расскажи (если знаешь, конечно) как ту же проверку на дом, где по 1000 раз подряд вызывается IsPlayerInRangeOfPoint для сверки координат, оптимизировать. Вот она действительно сильно режет производительность, ибо каждое нажатие на кнопку вызывает тайме с этим IsPlayerInRangeOfPoint. Оптимизировать её можно. И не только её. А текущая тема в большинстве своём содержит реализации, которые никак не повлияют на работу сервера, а лишь запутают людей :facepalm:


ну я думаю можно вообще всю карту разделить на зоны, смотреть в какой зоне находится игрок и там уже проверять :rolleyes:

#15
Пользователь офлайн   m1n1vv 

  • Искусственный Cверхинтеллект
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияkrutoy.krosch (10 Сентябрь 2016 - 09:01) писал:

ну я думаю можно вообще всю карту разделить на зоны, смотреть в какой зоне находится игрок и там уже проверять :rolleyes:

Или сверять позиции игрока и дома через GetPlayerDistanceFromPoint. Но тоже спорно.
0

#16
Пользователь офлайн   Nexius 

  • Знаток
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (10 Сентябрь 2016 - 08:53) писал:

По большей части в теме присутствует микрооптимизация, от которой в SA-MP мало пользы (очень немногие системы вызываются настолько часто, что ваши попытки ускорить код начнут приносить ощутимый результат). Тут вы лишь больше запутываете новичков, имхо.

Запутывать новичков, скорее всего, будут только способ инициализации массивов и оптимизации памяти (биты, пакование) - это как раз то, на что сейчас появилась нездоровая тенденция у пользователей некоторых порталов, а практической пользы от этого довольно мало. Всё остальное же полезно в целом, а запутаться в объявлении индивидуального таймера - не программировать вообще.

Сообщение отредактировал Nexius: 10 Сентябрь 2016 - 12:39

1

#17
Пользователь офлайн   Pe4en9 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (10 Сентябрь 2016 - 08:53) писал:

По большей части в теме присутствует микрооптимизация, от которой в SA-MP мало пользы (очень немногие системы вызываются настолько часто, что ваши попытки ускорить код начнут приносить ощутимый результат). Тут вы лишь больше запутываете новичков, имхо.

Если и хочешь поговорить об оптимизации, расскажи (если знаешь, конечно) как ту же проверку на дом, где по 1000 раз подряд вызывается IsPlayerInRangeOfPoint для сверки координат, оптимизировать. Вот она действительно сильно режет производительность, ибо каждое нажатие на кнопку вызывает тайме с этим IsPlayerInRangeOfPoint. Оптимизировать её можно. И не только её. А текущая тема в большинстве своём содержит реализации, которые никак не повлияют на работу сервера, а лишь запутают людей :facepalm:

Да, сейчас за какими то считанными секундами рвутся и мечутся.
Лучше б информация была по главную часть всех ИРПЭ ТРУ модов, циклы систем с проверкой IsPlayerInRangeOfPoint...
Давай тему создавай русскому комьюнити :D
0

#18
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияkrutoy.krosch (10 Сентябрь 2016 - 09:01) писал:

ну я думаю можно вообще всю карту разделить на зоны, смотреть в какой зоне находится игрок и там уже проверять :rolleyes:

Тогда уж проще динамические зоны использовать. Это, кстати, тоже будет гораздо быстрее и "оптимизированнее" (ибо вся работа на стример перекладывается), чем IsPlayerInRangeOfPoint.

Людей нужно учить думать, когда они код пишут, а не показывать какие-о конкретные методы непонятных оптимизаций. А так как большая часть скриптеров в сампе мимо проходящие (они пришли просто чтоб создать сервер. Им плевать на правильное изучение Pawn), научить их думать - нереально. В общем, тема всё ещё имеет малый КПД полезности, имхо

Просмотр сообщенияNexius (10 Сентябрь 2016 - 12:36) писал:

Запутывать новичков, скорее всего, будут только способ инициализации массивов и оптимизации памяти (биты, пакование) - это как раз то, на что сейчас появилась нездоровая тенденция у пользователей некоторых порталов, а практической пользы от этого довольно мало. Всё остальное же полезно в целом, а запутаться в объявлении индивидуального таймера - не программировать вообще.

Большинство примеров оптимизации тут применимы только к конкретному случаю. Взять даже твой пример с switch и "if": описывается конкретная ситуация, а не то, как человек должен думать, чтоб дойти до того, что ты хочешь сказать. Объяснение не должно базироваться на примерах. Человеку нужно объяснить логику суждения, а уже потом пичкать его примерами (что довольно тяжело сделать правильно). Именно поэтому данная тема пока не особо много пользы несёт в себе
0

#19
Пользователь офлайн   Nexius 

  • Знаток
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (10 Сентябрь 2016 - 14:16) писал:

Людей нужно учить думать, когда они код пишут, а не показывать какие-о конкретные методы непонятных оптимизаций.

Думать обычно учат в школе, ну или дефектологи, если уж совсем крайний случай. Да и каким тогда веником человека, не умеющего думать, заносит в скриптинг?
Даже больше: любая тема подразумевает то, что человек уже умеет в какой-то степени думать, а примеры - наиболее близки к практике и оттого наилучший вариант показать, чем одно лучше другого, и в каких ситуациях.

Просмотр сообщенияDeimoS (10 Сентябрь 2016 - 14:16) писал:

А так как большая часть скриптеров в сампе мимо проходящие (они пришли просто чтоб создать сервер. Им плевать на правильное изучение Pawn), научить их думать - нереально.

С такой логикой любые темы по оптимизации имеют малую полезность.

Просмотр сообщенияDeimoS (10 Сентябрь 2016 - 14:16) писал:

В общем, тема всё ещё имеет малый КПД полезности, имхо

Да, спасибо, мы поняли.

Сообщение отредактировал Nexius: 10 Сентябрь 2016 - 16:55

1

#20
Пользователь офлайн   Sound 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
Полностью согласен с Nexius. У тебя ко всему своя печенька.
Взять пример с индивидуальных таймеров:

Цитата

Метод был протестирован на сервере с онлайном 300 человек. У них тогда ещё были огромные лаги, а после того как я им перевёл на такие таймеры, все лаги прошли.


Да и вообще, если связывать всё больше и больше способов улучшить работу скрипта - это всё выйдет во вкусную конфетку. А закрывая глаза - наоборот выявит грыжу, возможно даже не большую, но грыжу.
Тем более, если не нравиться эта тема - почитай ссылку на статью от Y_LESS. И там встречаются моменты с этой темы, а уж поверь, ему доверяться многие, нежели человеку, который на факты отвечает - "имхо".
Ты, конечно, не глупый парень, но ведешь себя так, будто ты тут умнее всех, имхо.

Сообщение отредактировал Sound: 10 Сентябрь 2016 - 20:49

0

Поделиться темой:


  • (9 Страниц) +
  • 1
  • 2
  • 3
  • 4
  • Последняя »
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей