Size: a a a

2020 November 25

AS

Andrey Sudarikov in Unreal Engine
гарбадж коллектор срабатывает по времени, а не по объему, насколько я знаю
источник

Е

Егор in Unreal Engine
В настройках проекта выставил 1с, результат тот же
источник

AL

Anton Lomanov in Unreal Engine
Долбанный drm wrap  в стиме всегда по 3 часа думает? Иногда оборачивает за 1 минуту а иногда по пол часа ждешь, кто сталкивался и в чем проблема?
источник

NK

ID:0 in Unreal Engine
Возможно, самый полезный, огненный и обязательный к прочтению разговор, состоявшийся с партнером по UEDC2020. Беседуем с Евгением Малеевым из Xsolla о самом насущном: как и где искать инвестора, сколько просить, когда это делать и каких ошибок не допускать. Очень обстоятельно, детально и решительно обо всем самом важном. Читайте — и не говорите потом, что вам не объясняли, откуда и как взять денег на игру!

https://ue4daily.com/blog/xsolla
источник

N

Nikolay in Unreal Engine
Егор
В настройках проекта выставил 1с, результат тот же
Проблема при запуске в редакторе? В редакторе как-то странно GC работает.
источник

Е

Егор in Unreal Engine
Nikolay
Проблема при запуске в редакторе? В редакторе как-то странно GC работает.
При сборке тоже самое
источник

AR

Anton Rassadin in Unreal Engine
Егор
У меня сейчас всё работат, изначальный вопрос был в том почему анриал не вызывает гарбадж коллектор несмотря на то, что уже 14гб оперативы занято мусором на который никто не референсится. И это еще и при том, что в самом названии CreateTransient как-бы заложен смысл что эта текстура временная. Сейчас вот протестил код вообще без использования этой структуры, просто
auto texture = CreateTransient(640,320);
texture->ConditionalBeginDestroy();

и запихал его в OnTick - утечка на месте.
А если убрать ConditionalBeginDestroy и потом вызывать GC?
источник

Е

Егор in Unreal Engine
Anton Rassadin
А если убрать ConditionalBeginDestroy и потом вызывать GC?
Я выяснил частично в чём причина. Если вызвать CreateTransient не из гейм треда то GC почему-то забывает про текстурку, сейчас пытаюсь придумать как бы скалируемо это всё сделать а не руками настраивать частоту сборщика мусора
источник

AR

Anton Rassadin in Unreal Engine
Егор
Я выяснил частично в чём причина. Если вызвать CreateTransient не из гейм треда то GC почему-то забывает про текстурку, сейчас пытаюсь придумать как бы скалируемо это всё сделать а не руками настраивать частоту сборщика мусора
Что значит «забывает про текстуру»?
источник

Е

Егор in Unreal Engine
Anton Rassadin
Что значит «забывает про текстуру»?
Не очищает память за ней даже при явном вызове
источник

AR

Anton Rassadin in Unreal Engine
Никакой утечки там, конечно, нет. Ты что-то делаешь не так с объектами.
источник

PL

Peter Leontev in Unreal Engine
Егор
Я выяснил частично в чём причина. Если вызвать CreateTransient не из гейм треда то GC почему-то забывает про текстурку, сейчас пытаюсь придумать как бы скалируемо это всё сделать а не руками настраивать частоту сборщика мусора
Делай NewObject<UTexture2D> в gamethread, потом указатель просто отдавай в worker тред
источник

AR

Anton Rassadin in Unreal Engine
Peter Leontev
Делай NewObject<UTexture2D> в gamethread, потом указатель просто отдавай в worker тред
Оу, про game thread не заметил) да, именно в этом причина.
источник

Е

Егор in Unreal Engine
Peter Leontev
Делай NewObject<UTexture2D> в gamethread, потом указатель просто отдавай в worker тред
Уже так и сделал, работает даже, только теперь график используемой памяти скачкообразный, и судя по всему не выдержит реальной нагрузки. Не подскажите, можно как-то вручную удалить объёкт после использования? ConditionalBeginDestroy что-то не срабатывает
источник

PL

Peter Leontev in Unreal Engine
Егор
Уже так и сделал, работает даже, только теперь график используемой памяти скачкообразный, и судя по всему не выдержит реальной нагрузки. Не подскажите, можно как-то вручную удалить объёкт после использования? ConditionalBeginDestroy что-то не срабатывает
Сначала надо разобраться с входными параметрами (как и в любой другой задаче). Это значит, что нужно понимать, какое число текстур максимум будет одновременно отображаться, какого размера и как часто их нужно действительно удалять (нужна верхняя граница по RAM и GPU памяти).

Конечно всегда можно сделать частоту сбора мусора более высокой (н-р, раз в 1 секунду), но можно получить фризы на выходе. Гораздо оптимальнее выглядит подход с пулом текстур, который вы обновляете по необходимости
источник

Е

Егор in Unreal Engine
Peter Leontev
Сначала надо разобраться с входными параметрами (как и в любой другой задаче). Это значит, что нужно понимать, какое число текстур максимум будет одновременно отображаться, какого размера и как часто их нужно действительно удалять (нужна верхняя граница по RAM и GPU памяти).

Конечно всегда можно сделать частоту сбора мусора более высокой (н-р, раз в 1 секунду), но можно получить фризы на выходе. Гораздо оптимальнее выглядит подход с пулом текстур, который вы обновляете по необходимости
С пулом были проблемы, что их GC убивал через какое-то время и ловил access violation, проверки никакие не помогали
источник

PL

Peter Leontev in Unreal Engine
Егор
С пулом были проблемы, что их GC убивал через какое-то время и ловил access violation, проверки никакие не помогали
пул контейнер *нужно* UPROPERTY() пометить
источник

Е

Егор in Unreal Engine
Peter Leontev
пул контейнер *нужно* UPROPERTY() пометить
О, не знал, сейчас попробую, спасибо
источник

S

Serg in Unreal Engine
Егор
Я выяснил частично в чём причина. Если вызвать CreateTransient не из гейм треда то GC почему-то забывает про текстурку, сейчас пытаюсь придумать как бы скалируемо это всё сделать а не руками настраивать частоту сборщика мусора
Потому что она помечается флагом Async, и коллектор ее игнорирует. Чисти вручную, через conditional begin destroy
источник

AN

Arthur Novikov in Unreal Engine
Всем привет. Взять GetAnimInstance у БП и присвоить в отдельную переменную - это же эффективнее чем каждый раз вызывать GetAnimInstance в ивенте? Почему тогда все так делают?
источник