Оптимизация больших луа скриптов

Статус
В этой теме нельзя размещать новые ответы.

nede7u

Участник
Автор темы
81
21
Версия MoonLoader
.026-beta
Всем привет, пишу большой хелпер, но встретился с ОГРОМНОЙ проблемой.
У всех тестеров, фпс падает очень сильно из за скрипта. Как пример у меня 250 фпс стабильно, ставлю скрипт и у меня 60 фпс...

Прочитал множество тем, советуют использовать как можно меньше глобальных массивов и т.п., ну переписал я 20к строк, не особо то и помогло...
Киньте пожалуйста советов для оптимизации, ибо это кошмар..
 

Vespan

Чешский луашер
Проверенный
2,120
1,722
Есть. У каждого скрипта свои циклы, соответственно нагружают они тоже соответствующе
while true do , lua_thread.create нагружают пк
 
  • Нравится
Реакции: nede7u и YarikVL

nede7u

Участник
Автор темы
81
21

while true do , lua_thread.create нагружают пк
в папке 1 луа скрипт и это хелпер, я про это тоже знаю
 

Vespan

Чешский луашер
Проверенный
2,120
1,722
в папке 1 луа скрипт и это хелпер, я про это тоже знаю
Это к чему
Проверь сколько бесконечных цыклов есть в скрипте
И постарайся снизить, ну в один бесс.цыкл
И потом посмотри на фпс, уверен он выростет
 
  • Нравится
Реакции: nede7u

nede7u

Участник
Автор темы
81
21
Это к чему
Проверь сколько бесконечных цыклов есть в скрипте
И постарайся снизить, ну в один бесс.цыкл
И потом посмотри на фпс, уверен он выростет
Про количество скриптов я к тому что он один в папке, либ тоже минимально, чисто к скрипту. Я знаю что каждый скрипт снижает ФПС

Это к чему
Проверь сколько бесконечных цыклов есть в скрипте
И постарайся снизить, ну в один бесс.цыкл
И потом посмотри на фпс, уверен он выростет
Щас буду снижать количество циклов до минимума, дам после ответ)
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,652
2,535
И постарайся снизить, ну в один бесс.цыкл
циклы не кусаются, их (потоки) можно добавлять сколько угодно, производительность съедает именно исполнение каждой функции в самом цикле
 
  • Вау
  • Клоун
  • Нравится
Реакции: Fott, nede7u и Vespan

nede7u

Участник
Автор темы
81
21
Я щас дико проорал, IMGUi с MoonMonet с 200 ФПС на 50 ФПС, БЕЗ MoonMonet 200 ФПС без изменений, прикол какой то?

Стиль:
imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local flags = imgui.Col

    style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
    style.ButtonTextAlign = imgui.ImVec2(0.5, 0.5)
    style.WindowRounding = 10
    style.WindowPadding = imgui.ImVec2(8, 8)
    style.ChildWindowRounding = 5
    style.FrameRounding = 3
    style.ItemSpacing = imgui.ImVec2(5, 4)
    style.ScrollbarSize = 10
    style.ScrollbarRounding = 0
    style.GrabMinSize = 8
    style.GrabRounding = 1

    local function to_vec4(u32)
        local a = bit.band(bit.rshift(u32, 24), 0xFF) / 0xFF
        local r = bit.band(bit.rshift(u32, 16), 0xFF) / 0xFF
        local g = bit.band(bit.rshift(u32, 8), 0xFF) / 0xFF
        local b = bit.band(u32, 0xFF) / 0xFF
        return imgui.ImVec4(r, g, b, a)
    end

    local monet = require("MoonMonet")
    local palette = monet.buildColors(color, chroma_multiplier, accurate_shades)

    colors[flags.Text] = to_vec4(palette.neutral2.color_0)
    colors[flags.TextDisabled] = to_vec4(palette.neutral2.color_0, 0.5)
    colors[flags.WindowBg] = to_vec4(palette.accent2.color_900, nil, -20)
    colors[flags.ChildWindowBg] = to_vec4(0)
    colors[flags.PopupBg] = to_vec4(palette.accent2.color_900, nil, -20)
    colors[flags.Border] = to_vec4(palette.accent1.color_500)
    colors[flags.BorderShadow] = to_vec4(0)

    colors[flags.FrameBg] = to_vec4(palette.accent2.color_800, nil, 15)
    colors[flags.FrameBgHovered] = to_vec4(palette.accent1.color_600)
    colors[flags.FrameBgActive] = to_vec4(palette.accent1.color_500)

    colors[flags.TitleBg] = to_vec4(palette.accent1.color_600)
    colors[flags.TitleBgActive] = to_vec4(palette.accent1.color_600)
    colors[flags.MenuBarBg] = to_vec4(palette.accent1.color_500)
    colors[flags.CloseButton] = to_vec4(palette.accent2.color_800)
    colors[flags.CloseButtonHovered] = to_vec4(palette.accent2.color_900, nil, -25)
    colors[flags.CloseButtonActive] = to_vec4(palette.accent2.color_900, nil, -25)
    colors[flags.ScrollbarBg] = to_vec4(palette.accent2.color_900, 0.5)
    colors[flags.ScrollbarGrab] = to_vec4(palette.accent1.color_600)
    colors[flags.ScrollbarGrabHovered] = to_vec4(palette.accent1.color_500)
    colors[flags.ScrollbarGrabActive] = to_vec4(palette.accent1.color_500)
    colors[flags.CheckMark] = to_vec4(palette.accent1.color_500)
    colors[flags.SliderGrab] = to_vec4(palette.accent2.color_500)
    colors[flags.SliderGrabActive] = to_vec4(palette.accent2.color_400)
    colors[flags.Button] = to_vec4(palette.accent1.color_600)
    colors[flags.ButtonHovered] = to_vec4(palette.accent1.color_500)
    colors[flags.ButtonActive] = to_vec4(palette.accent1.color_400)
    colors[flags.Header] = to_vec4(palette.accent1.color_700)
    colors[flags.HeaderHovered] = to_vec4(palette.accent1.color_600)
    colors[flags.HeaderActive] = to_vec4(palette.accent1.color_500)
    colors[flags.Separator] = to_vec4(palette.accent2.color_700)
    colors[flags.SeparatorHovered] = to_vec4(palette.accent2.color_100)
    colors[flags.SeparatorActive] = to_vec4(palette.accent2.color_50)
    colors[flags.ResizeGrip] = to_vec4(palette.accent2.color_800)
    colors[flags.ResizeGripHovered] = to_vec4(palette.accent2.color_700)
    colors[flags.ResizeGripActive] = to_vec4(palette.accent2.color_700)
    colors[flags.TextSelectedBg] = to_vec4(palette.accent1.color_200, 0.3)
    colors[flags.ModalWindowDarkening] = imgui.ImVec4(0, 0, 0, 0.3)
 

arpix

Активный
119
32
Я щас дико проорал, IMGUi с MoonMonet с 200 ФПС на 50 ФПС, БЕЗ MoonMonet 200 ФПС без изменений, прикол какой то?

Стиль:
imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local flags = imgui.Col

    style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
    style.ButtonTextAlign = imgui.ImVec2(0.5, 0.5)
    style.WindowRounding = 10
    style.WindowPadding = imgui.ImVec2(8, 8)
    style.ChildWindowRounding = 5
    style.FrameRounding = 3
    style.ItemSpacing = imgui.ImVec2(5, 4)
    style.ScrollbarSize = 10
    style.ScrollbarRounding = 0
    style.GrabMinSize = 8
    style.GrabRounding = 1

    local function to_vec4(u32)
        local a = bit.band(bit.rshift(u32, 24), 0xFF) / 0xFF
        local r = bit.band(bit.rshift(u32, 16), 0xFF) / 0xFF
        local g = bit.band(bit.rshift(u32, 8), 0xFF) / 0xFF
        local b = bit.band(u32, 0xFF) / 0xFF
        return imgui.ImVec4(r, g, b, a)
    end

    local monet = require("MoonMonet")
    local palette = monet.buildColors(color, chroma_multiplier, accurate_shades)

    colors[flags.Text] = to_vec4(palette.neutral2.color_0)
    colors[flags.TextDisabled] = to_vec4(palette.neutral2.color_0, 0.5)
    colors[flags.WindowBg] = to_vec4(palette.accent2.color_900, nil, -20)
    colors[flags.ChildWindowBg] = to_vec4(0)
    colors[flags.PopupBg] = to_vec4(palette.accent2.color_900, nil, -20)
    colors[flags.Border] = to_vec4(palette.accent1.color_500)
    colors[flags.BorderShadow] = to_vec4(0)

    colors[flags.FrameBg] = to_vec4(palette.accent2.color_800, nil, 15)
    colors[flags.FrameBgHovered] = to_vec4(palette.accent1.color_600)
    colors[flags.FrameBgActive] = to_vec4(palette.accent1.color_500)

    colors[flags.TitleBg] = to_vec4(palette.accent1.color_600)
    colors[flags.TitleBgActive] = to_vec4(palette.accent1.color_600)
    colors[flags.MenuBarBg] = to_vec4(palette.accent1.color_500)
    colors[flags.CloseButton] = to_vec4(palette.accent2.color_800)
    colors[flags.CloseButtonHovered] = to_vec4(palette.accent2.color_900, nil, -25)
    colors[flags.CloseButtonActive] = to_vec4(palette.accent2.color_900, nil, -25)
    colors[flags.ScrollbarBg] = to_vec4(palette.accent2.color_900, 0.5)
    colors[flags.ScrollbarGrab] = to_vec4(palette.accent1.color_600)
    colors[flags.ScrollbarGrabHovered] = to_vec4(palette.accent1.color_500)
    colors[flags.ScrollbarGrabActive] = to_vec4(palette.accent1.color_500)
    colors[flags.CheckMark] = to_vec4(palette.accent1.color_500)
    colors[flags.SliderGrab] = to_vec4(palette.accent2.color_500)
    colors[flags.SliderGrabActive] = to_vec4(palette.accent2.color_400)
    colors[flags.Button] = to_vec4(palette.accent1.color_600)
    colors[flags.ButtonHovered] = to_vec4(palette.accent1.color_500)
    colors[flags.ButtonActive] = to_vec4(palette.accent1.color_400)
    colors[flags.Header] = to_vec4(palette.accent1.color_700)
    colors[flags.HeaderHovered] = to_vec4(palette.accent1.color_600)
    colors[flags.HeaderActive] = to_vec4(palette.accent1.color_500)
    colors[flags.Separator] = to_vec4(palette.accent2.color_700)
    colors[flags.SeparatorHovered] = to_vec4(palette.accent2.color_100)
    colors[flags.SeparatorActive] = to_vec4(palette.accent2.color_50)
    colors[flags.ResizeGrip] = to_vec4(palette.accent2.color_800)
    colors[flags.ResizeGripHovered] = to_vec4(palette.accent2.color_700)
    colors[flags.ResizeGripActive] = to_vec4(palette.accent2.color_700)
    colors[flags.TextSelectedBg] = to_vec4(palette.accent1.color_200, 0.3)
    colors[flags.ModalWindowDarkening] = imgui.ImVec4(0, 0, 0, 0.3)
это шд
 

nede7u

Участник
Автор темы
81
21
Я щас дико проорал, IMGUi с MoonMonet с 200 ФПС на 50 ФПС, БЕЗ MoonMonet 200 ФПС без изменений, прикол какой то?

Стиль:
imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local flags = imgui.Col

    style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
    style.ButtonTextAlign = imgui.ImVec2(0.5, 0.5)
    style.WindowRounding = 10
    style.WindowPadding = imgui.ImVec2(8, 8)
    style.ChildWindowRounding = 5
    style.FrameRounding = 3
    style.ItemSpacing = imgui.ImVec2(5, 4)
    style.ScrollbarSize = 10
    style.ScrollbarRounding = 0
    style.GrabMinSize = 8
    style.GrabRounding = 1

    local function to_vec4(u32)
        local a = bit.band(bit.rshift(u32, 24), 0xFF) / 0xFF
        local r = bit.band(bit.rshift(u32, 16), 0xFF) / 0xFF
        local g = bit.band(bit.rshift(u32, 8), 0xFF) / 0xFF
        local b = bit.band(u32, 0xFF) / 0xFF
        return imgui.ImVec4(r, g, b, a)
    end

    local monet = require("MoonMonet")
    local palette = monet.buildColors(color, chroma_multiplier, accurate_shades)

    colors[flags.Text] = to_vec4(palette.neutral2.color_0)
    colors[flags.TextDisabled] = to_vec4(palette.neutral2.color_0, 0.5)
    colors[flags.WindowBg] = to_vec4(palette.accent2.color_900, nil, -20)
    colors[flags.ChildWindowBg] = to_vec4(0)
    colors[flags.PopupBg] = to_vec4(palette.accent2.color_900, nil, -20)
    colors[flags.Border] = to_vec4(palette.accent1.color_500)
    colors[flags.BorderShadow] = to_vec4(0)

    colors[flags.FrameBg] = to_vec4(palette.accent2.color_800, nil, 15)
    colors[flags.FrameBgHovered] = to_vec4(palette.accent1.color_600)
    colors[flags.FrameBgActive] = to_vec4(palette.accent1.color_500)

    colors[flags.TitleBg] = to_vec4(palette.accent1.color_600)
    colors[flags.TitleBgActive] = to_vec4(palette.accent1.color_600)
    colors[flags.MenuBarBg] = to_vec4(palette.accent1.color_500)
    colors[flags.CloseButton] = to_vec4(palette.accent2.color_800)
    colors[flags.CloseButtonHovered] = to_vec4(palette.accent2.color_900, nil, -25)
    colors[flags.CloseButtonActive] = to_vec4(palette.accent2.color_900, nil, -25)
    colors[flags.ScrollbarBg] = to_vec4(palette.accent2.color_900, 0.5)
    colors[flags.ScrollbarGrab] = to_vec4(palette.accent1.color_600)
    colors[flags.ScrollbarGrabHovered] = to_vec4(palette.accent1.color_500)
    colors[flags.ScrollbarGrabActive] = to_vec4(palette.accent1.color_500)
    colors[flags.CheckMark] = to_vec4(palette.accent1.color_500)
    colors[flags.SliderGrab] = to_vec4(palette.accent2.color_500)
    colors[flags.SliderGrabActive] = to_vec4(palette.accent2.color_400)
    colors[flags.Button] = to_vec4(palette.accent1.color_600)
    colors[flags.ButtonHovered] = to_vec4(palette.accent1.color_500)
    colors[flags.ButtonActive] = to_vec4(palette.accent1.color_400)
    colors[flags.Header] = to_vec4(palette.accent1.color_700)
    colors[flags.HeaderHovered] = to_vec4(palette.accent1.color_600)
    colors[flags.HeaderActive] = to_vec4(palette.accent1.color_500)
    colors[flags.Separator] = to_vec4(palette.accent2.color_700)
    colors[flags.SeparatorHovered] = to_vec4(palette.accent2.color_100)
    colors[flags.SeparatorActive] = to_vec4(palette.accent2.color_50)
    colors[flags.ResizeGrip] = to_vec4(palette.accent2.color_800)
    colors[flags.ResizeGripHovered] = to_vec4(palette.accent2.color_700)
    colors[flags.ResizeGripActive] = to_vec4(palette.accent2.color_700)
    colors[flags.TextSelectedBg] = to_vec4(palette.accent1.color_200, 0.3)
    colors[flags.ModalWindowDarkening] = imgui.ImVec4(0, 0, 0, 0.3)
Я на голом луа начал писать по новой скрипт и анализируя ошибки свои... Просто начал с IMGUI :D

Убрал moonmonet с основного скрипта, -15 фпс, делаем выводы: зачем moonmonet на imgui?????
 

wojciech?

Известный
Проверенный
350
230
Убрал moonmonet с основного скрипта, -15 фпс, делаем выводы: зачем moonmonet на imgui?????
Может дело в его использовании? Если вызвать функцию один раз (или при необходимости изменения цветов), то она не создаст такой нагрузки. Меньше действий -> меньше нагрузки
 

Qwick

Участник
13
2
Смотрю много что тут посоветовали вам, но от своего опыта скажу: чем больше текста и прочего вы выводите на экран - тем меньше FPS. Возьмём обычный пример и скроем HUD и наш FPS поднимется! (Разница конечно не колоссальная, но если вы забили полностью себе экран...)
 
  • Нравится
Реакции: nede7u

nede7u

Участник
Автор темы
81
21
Может дело в его использовании? Если вызвать функцию один раз (или при необходимости изменения цветов), то она не создаст такой нагрузки. Меньше действий -> меньше нагрузки
я выше прикрепил как использую,

функция apply_custum(...)
код выше

и добавляю эту функцию в ondrawframe
 
Статус
В этой теме нельзя размещать новые ответы.