Удаление swift_deallocClassInstance из трассировки

#swift #macos #profiling

#swift #macos #профилирование

Вопрос:

Я пытался оптимизировать некоторый код Swift и вижу эту трассировку:

 308.00 ms   10.2%   25.00 ms                    swift_deallocClassInstance
  

Я понятия не имею, что является причиной этого, и пытаюсь выяснить, что будет освобождать в методе. Кто-нибудь видел, как это появилось в профиле или знает, что является его причиной. Он отображается в этом методе. Я просмотрел любые переменные типа класса сортировки, но, похоже, не могу их определить. Один из методов использует некоторый статический struct OptionSet но я бы не подумал, что это вызовет. Все остальные переданные параметры являются Ints

Это более 50% от фактического метода и 10% от общей трассировки:

 final func generateTextures(options: TextureOptions, baseLevel: Int) -> [AreaData] {

    otherMethodCall();
    methodCall()

    for i in 0..<size {
        ...
    }

    for i in 0..<width {
        switch someVar {
        ...
        default:
            switch someVar {
            ...
            }
        }
    }


    for i in stride(from: width - 1, to: size, by: width) {
        switch someVar {
            ....
        default:
            switch someVar{
                ...
            }
        }
    }



    // post processing
    for i in 0..<size {
        ... method
    }

    for i in 0..<size {
        ..some more stuff
    }

    for i in 0..<size {
        ..some more stuff

    }

    anotherMethod()
    return someMethod()

}
  

Ответ №1:

Я удалил все опции, установленные для использования в методе, и перешел непосредственно к raw Int , и этот огромный успех исчез. Я надеялся, что они скомпилировали наборы параметров в int или операции с необработанными значениями напрямую, я думаю, нет.