#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 или операции с необработанными значениями напрямую, я думаю, нет.