UI スレッドをブロックしてるんですよね。
10万レコードのような大きいデータを fetch()
すると。

バックグラウンドで大量インサートなどしながら、
UI側でリストなどをスクロールするともっと顕著に分かります。
どうやら、
「インスタンス生成をどこで行うか」
が大事なようです。
singleton の ModelActor
側。
@ModelActor
actor DataSource {
nonisolated(unsafe) private(set) static var shared: DataSource!
// static func createInstance(modelContainer: ModelContainer) {
// print("createInstance()", Thread.current) // main
// shared = DataSource(modelContainer: modelContainer)
// }
static func createInstance(modelContainer: ModelContainer) async {
print("createInstance()", Thread.current) // not main
shared = DataSource(modelContainer: modelContainer)
}
View
側。インスタンス生成はバックグラウンドで。
// .onAppear { // main
// DataSource.createInstance(modelContainer: modelContext.container)
// }
.task { // not main
await DataSource.createInstance(modelContainer: modelContext.container)
}

どうなんすかね。
SwiftData も苦しんでる感じに見えます。
👉 SwiftData does not work on a background Task even inside a custom ModelActor. | Apple Developer Forums 