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 も苦しんでる感じに見えます。
関連ワード: apple・iOS・iPhone・mac・macOS・Swift・SwiftData・SwiftUI・今さら聞けない・初心者・評判・開発
 
		 
          