带有大数据集的列表的SwiftUI性能问题

时间:2020-07-24 14:13:31

标签: swiftui

我有一个包含16.000个项目的未过滤数据集的列表。 初始加载效果很好,但是过滤=更改列表项非常慢,且耗时超过20秒。

here中描述了该问题:

如果您查看Instruments,它会告诉您几乎所有CPU时间都花在CollectionChanges.formChanges()中。 此方法将对列表的更改(插入,删除)计算出来,以便对其进行动画处理。

因此,以上链接建议在List上设置一个ID,以告知SwiftUI每个更改都代表一个新列表。然后,它不应尝试对更改进行动画处理-因此不要调用CollectionChanges.formChanges()-而是立即绘制列表。

但是上述技巧似乎不再起作用(iOS 13.6和Xcode 11.6),SwiftUI仍会计算更改并将其设置为动画。

因此,有什么方法可以告诉SwiftUI 对列表进行动画处理吗?

这是上面链接的示例代码:

struct ContentView: View {
    @State var items = Array(1...1600)

    var body: some View {
        VStack {
            Button("Shuffle") {
                self.items.shuffle()
            }

            List(items, id: \.self) {
                Text("Item \($0)")
            }
            .id(UUID())
        }
    }
}

(附带说明:此处建议的解决方法SwiftUI Bug - List changes lock UI - (OLD TITLE: SwiftUI CoreData fetch is very slow)不能显示100毫秒的空列表。)

0 个答案:

没有答案