ASI DynamicStreaming

SR_team

like pancake
Автор темы
BH Team
4,719
6,362
Версия SA-MP
  1. Любая
Плагин динамически меняет количество стриминг памяти, а так же чистит ее при заполнении не удаляя объекты, которые вы видите на экране.

1630341083915.png


По умолчанию в игре ограничено количество памяти, которое используют объекты на экране. В SA:MP это ограничение повышено, но при использовании сборок даже повышенного ограничения бывает недостаточно.

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

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

Почему нельзя выделить памяти больше, чем размер gta3.img, что бы все объекты были в памяти
Игра 32-битная, это значит, что она использует 32-битные регистры и инструкции процессора. Это значит, что максимальный адрес в памяти к которому игра может обратиться это 32 единицы в двоичной системе счисления, что равно 4 гигабайтам. Однако и 4гб игре не доступны, потому что число может быть не только положительным, но и отрицательным, а это значит, что среди 32 единиц и нолей одна цифра должна означать знак +/-. Следовательно на адреса в памяти остается 31 бит - 31 единица это 2гб.

Можно ли как-то пропатчить игру, что бы все 32 бита означали адрес и игра могла использовать 4гб
Можно установить флаг LAA (large address aware) в заголовке PE у gta_sa.exe

Почему на некоторых сборках игра крашит при заполнении стриминг памяти
Максимальный лимит, который можно указать для стриминга 4гб (что и делают в сборках), но как было описано выше игра не может столько использовать. В итоге она крашит из-за нехватки памяти

Что отличает этот плагин от других
Данный плагин проверяет сколько памяти игра использует НЕ для стриминга и всю остальную доступную память отдает под стриминг, что бы минимизировать лаги при его заполнении. При этом если это возможно, не дает игре выйти за пределы оперативной памяти, если ее меньше 4гб в компе, что позволяет избежать использования файла подкачки, загрузка данных из которого такая же медленная, как загрузка с диска.

Что будет делать плагин, когда стриминговая память закончится
Плагин заранее, при достижении 90% заполнения запустит таймер на 1 минуту, по истечению которого половина (или четверть, если памяти мало) стриминга будет очищено.

Как работает очистка стриминга
Сначала удаляются объекты, которых давно не было на экране. Если этого не достаточно, то удаляются объекты за спиной игрока, которые не видно. Если и этого не достаточно, то удаляются объекты на экране. В общем визуально очистка не должна быть заметна.

Исходники: https://gitlab.com/prime-hack/samp/plugins/DynamicStreaming
 

Вложения

  • DynamicStreaming.asi
    202 KB · Просмотры: 4,385
Последнее редактирование:

Hatiko

Известный
Проверенный
1,472
611
Это решает проблему, когда в зоне стрима много разных ентити из-за этого пролаг идёт?
 

dochto

Известный
6
34
Это ты для своего плагина с гиф сделал? Там просто проблема с подгрузкой больших гифок.

upd. Затестил и всё понял, вопросов zero
 
Последнее редактирование:

SR_team

like pancake
Автор темы
BH Team
4,719
6,362
Сейчас когда проснулся, понял, что ты немного о другом говорил. Добавил сборщик мусора, который ты хотел. Срабатывает на 80% заполнения стриминг памяти. Через 5 минут CI соберет и зальет обновленный плагин в пост
 

SR_team

like pancake
Автор темы
BH Team
4,719
6,362
обьясните дурачку, для чего этот скрипт нужен (что изменит рядовому игроку) ?
Тоже, что эти 2 скрипта, но не надо ничего самому настраивать:
  1. https://www.blast.hk/threads/21780/
  2. https://www.blast.hk/threads/20961/
Мой плагин сам определяет сколько памяти надо выделить и когда ее чистить
 
  • Нравится
Реакции: loganhackerdff и LagoonNR

livingflore

Известный
366
319

Похожие темы