gpt4 book ai didi

swiftui - 使用实时数据滚动时 SwiftUI 列表非常慢

转载 作者:行者123 更新时间:2023-12-04 17:15:44 27 4
gpt4 key购买 nike

我有一个列表和一个数组中的大约 1000 个项目,我的项目实时更新(100 次更新/秒)。我的列表性能很差。

这是我的测试代码(我尝试使用 List 和 LazyVStack):


struct PriceBoardView2 : View {
@EnvironmentObject var loadingEnv : LoadingEnv
@State var listUser : [UserModel]

var body: some View {
VStack(content: {
Button(action: {
updateData() //fake data realtime update
}, label: {
Text("Fake data realtime update")
})
List(content: {
ForEach(listUser.indices, id: \.self) { i in
RowPriceBoardView2(userModel: listUser[i])
}
})
// ScrollView(content: {
// LazyVStack(content: {
// ForEach(listUser.indices, id: \.self) { i in
// RowPriceBoardView2(userModel: listUser[i])
// }
// })
// })
})
.onAppear(perform: {
for i in 0..<1000 {
listUser.append(UserModel(number: i, name: "-", age: 0))
}
})
}

func updateData() {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.01, execute: {
let i = Int.random(in: 0..<1000)
self.listUser[i] = UserModel(number: i, name: "Pla pla", age: Int.random(in: 0..<1000))
updateData()
})
}
}


struct UserModel {
var number : Int
var name : String
var age : Int
}

struct RowPriceBoardView2: View {
var userModel : UserModel

var body: some View {
HStack(content: {
Text("\(userModel.number)")
Spacer()
Text("\(userModel.name)")
Spacer()
Text("\(userModel.age)")
})
.frame(width: .infinity, height: 30, alignment: .center)
}
}

最佳答案

您 a) 主队列中的所有内容,以及 b) 过于频繁而无法刷新 UI。因此答案是 - a) 数据准备应该在后台线程上完成,b) 如果准备速度更快,则需要以某种方式组合 50ms 数据(这部分应用程序逻辑也是你的)

这是一个将数据准备和 UI 更新分开的模式:


func updateData() {
DispatchQueue.global(qos: .background).asyncAfter(deadline: DispatchTime.now() + 0.1, execute: {
// 1) prepare in background queue
let i = Int.random(in: 0..<1000)
let newValue = UserModel(number: i, name: "Pla pla", age: Int.random(in: 0..<1000))

DispatchQueue.main.async {
// 2) update UI on main queue
self.listUser[i] = newValue
updateData()
}
})
}

关于swiftui - 使用实时数据滚动时 SwiftUI 列表非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68773561/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com