Unity 6.3
0 онлайн 96 гостей 3 в системе
Вход
Оптимизация Шаг 20 из 208

Пример выделения стека локального хранилища потока

Предварительные условия

В примерах используются отчеты об использовании памяти, которые Unity записывает в журнал при закрытии Проигрывателя или Unity Editor. Для создания этих отчетов используйте аргумент командной строки -log-memory-performance-stats. Чтобы найти файлы журнала проекта, следуйте инструкциям на странице файлов журнала.

TLS отчеты об использовании распределителя стека

Если распределитель стека потока заполнен, распределения падают обратно к линейный распределитель threadsafe. Несколько переполнений вполне нормально: от 1 до 10 в кадре, или несколько сотен во время загрузки. Однако, если числа растут с каждым кадром, можно увеличить размер блока.

Настраиваемое значение Размер блока главной нити в быстром временном распределителе на поток
Настраиваемое значение Размер блока главной нити в быстром временном распределителе на поток

Чтобы увеличить размер блока, установите значение в Редакторе или используйте аргументы командной строки. Дополнительные сведения см. в разделе Настройка распределителей собственной памяти.

Информация в отчете об использовании может помочь вам выбрать размер блока, подходящий для вашего приложения. Например, в следующем отчете об использовании основного потока пик нагрузки приходится на 2.7 MB, но оставшиеся кадры составляют менее 64 KB.. Вы можете уменьшить размер блока с 4 MB до 64 KB и разрешить загрузке кадра перелить выделения:

[ALLOC_TEMP_TLS] TLS Allocator
  StackAllocators :
    [ALLOC_TEMP_MAIN]
      Peak usage frame count: [16.0 KB-32.0 KB]: 802 frames, [32.0 KB-64.0 KB]: 424 frames, [2.0 MB-4.0 MB]: 1 frames
      Initial Block Size 4.0 MB
      Current Block Size 4.0 MB
      Peak Allocated Bytes 2.7 MB
      Overflow Count 0
    [ALLOC_TEMP_Job.Worker 18]

В следующем примере рабочий поток не используется для больших временных выделений. Чтобы сэкономить память, можно уменьшить размер блока рабочего потока до 32 KB. Это полезно на многоядерной машине, где каждый рабочий поток имеет свой собственный стек:

[ALLOC_TEMP_Job.Worker 14]
      Initial Block Size 256.0 KB
      Current Block Size 256.0 KB
      Peak Allocated Bytes 18.6 KB
      Overflow Count 0

Дополнительные ресурсы