ASI DynamicStreaming

Diego_Sativa

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

Посмотреть вложение 112629

По умолчанию в игре ограничено количество памяти, которое используют объекты на экране. В 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
Произошол краш изза нехватки памяти, скрипт не производил очистку получается!? и самп съел всю память... и крашнул, хелпуй
 

ForestLive

Известный
40
4
не понимаю о чём ты.
 

Dffdff

Участник
46
4
Привет, не успел увидеть твой ответ но есть такая проблема. Если модов много,а у меня их в модлоадере на 8 Гб и очистка идёт 19 адресов памяти то бывают краши. Прошу, можешь сделать версию, где чистятся только 5 адресов памяти, как у Azzlera в луа скрипте. Заранее благодарю.
 

Hatiko

Известный
Проверенный
1,472
611
Когда отсутствует соединение с серверов, при нажатии на F5, игра крашится. Хз, то ли из-за того, что на аризона лаунчере используется и имеется конфликт, либо в плагине что-то.
 

SR_team

like pancake
Автор темы
BH Team
4,720
6,367
Привет, не успел увидеть твой ответ но есть такая проблема. Если модов много,а у меня их в модлоадере на 8 Гб и очистка идёт 19 адресов памяти то бывают краши. Прошу, можешь сделать версию, где чистятся только 5 адресов памяти, как у Azzlera в луа скрипте. Заранее благодарю.
у меня только 1 адрес, который говорит игре сколько памяти надо освободить, а дальше она сама решает как это делать
 

Dffdff

Участник
46
4
у меня только 1 адрес, который говорит игре сколько памяти надо освободить, а дальше она сама решает как это делать
Понял, спасибо за ответ. Просто заметил что при очистке на секунду мерцают текстуры, что происходило при тесте другого скрипта на 19 адресов. А от него и были краши. Тогда вопрос, а можно прописать так,чтобы не игра решала какие адреса чистить а только заданные. Ибо игра скорее чистит все адреса памяти - что приводит к крашу когда много текстур заменено. Ибо у меня стоит rosa evolved плюс srt 2014 и замена всех тачек и скинов. Но при тесте скрипта на 5 адресов памяти крашей нету. Мог бы ты их прописать?

у меня только 1 адрес, который говорит игре сколько памяти надо освободить, а дальше она сама решает как это делать
Вот в этой теме в скрипте те 5 адресов, которые чистят без крага. Проблема в том, что этот скрипт пришлось переделать на ручную активацию ибо с автолчисткой в одиночной игре краши из за того что нету динамического вычисления памяти и до этого мне приходилось каждые 3-5 проживать клавишу, чтобы нормально играть со всеми модами. Смог бы ты эти 5 адресов прописать в свой Аси, чтобы именно они числились? Заранее благодарю за ответ https://www.blast.hk/threads/20961/
 
Последнее редактирование:

Dffdff

Участник
46
4
у меня только 1 адрес, который говорит игре сколько памяти надо освободить, а дальше она сама решает как это делать

у меня только 1 адрес, который говорит игре сколько памяти надо освободить, а дальше она сама решает как это делать
Привет, тестировал обновленный скрипт. Ездил по карте на нрг и летал эирбрейком. Когда летал чистка памяти проходила нормально с небольшими фризами, немудрено - у меня модлоадер розросся до 16 Гб. Но вот во время езды на нрг начались краши через 5 мин. Хз почему. Догадываюсь, когда в стриме было мало объектов и авто - чистило память норм, но при въезде, например в район мэрии где дофига тачек скорее всего происходит резкий скачок стримпамяти и скрипт не успевает почистить. Или краш происходит все таки из за того что очищаются все адреса памяти, и какой то из них вызывает краш. Эх если бы ты доделал этот плагин, ему бы цены не было, так как все сейчас поголовно ремастерят гта св, и хочется подольше играть в эту красоту )))
 

ARMOR

kjor32 is legend
Модератор
4,845
6,066
Плагин динамически меняет количество стриминг памяти, а так же чистит ее при заполнении не удаляя объекты, которые вы видите на экране.

Посмотреть вложение 112629

По умолчанию в игре ограничено количество памяти, которое используют объекты на экране. В 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
Что за шрифт используется для F5?

Извиняюсь за офтоп
 

Похожие темы