Создание экземпляров модели SwiftData очень медленноеIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Гость
 Создание экземпляров модели SwiftData очень медленное

Сообщение Гость »


ОБНОВЛЕНИЕ: я использовал один из своих билетов «поддержки на уровне кода» в Apple. Отправил тестовый проект вместе с тестовыми данными. Их ответ: «Нет обходной путь DTS может предоставить идентификатор обратной связи #FB13432637; это все еще под следствием. Пожалуйста, продолжайте отслеживать проблему через ошибку. отчет."

Разве SwiftData не предназначен для больших наборов данных? Как создать много экземпляров моей модели данных?

У меня есть цикл, в котором я перебираю CSV-файл, содержащий более 30 тысяч строк. Всего около 230 тыс. элементов. Я собираюсь сохранить эти данные в SwiftData. Однако это занимает около 90 секунд. В предыдущих версиях моего приложения я использовал coreData. Тогда это заняло всего 3 секунды. Итак, после долгих исследований я пришел к выводу, что задержка связана с созданием экземпляров модели данных. Чтобы проверить это, у меня есть:
[*]Удалены все сохранения в SwiftData. Таким образом, происходит только создание объекта модели. [*]Создана точная копия класса SwiftData Model, но допущен макрос @Model. [*]установите для isAutosaveEnabled значение false
Когда я запускаю цикл с классом копирования, это занимает 3 секунды. Поэтому, должно быть, создание экземпляров модели SwiftData вызывает задержку *30.

Код, использующий SwiftData @Model. Этот цикл занимает более 90 секунд

@Model класс TimetableData { вар прибытияВремя: Int = 0 вар отправленияTime: Int = 0 вар отправленияRoute: Int = 0 вар DirectionOfTravel: Int = 0 вар DutyNumber: Int = 0 вар объектИдентификатор: String = "" var locationType: String = "" режим вар: String = "" вар nonStopStatus: Int = 0 var RecordIdentifier: String = "" вар timetableIdentifier: Int = 0 вар trainNumber: String = "" вар tripNumber: Int = 0 вар tripStartSite : String = "" var uniqueLocationCode: String = "" init(arrivalTime: Int = 0, DeventTime: Int = 0, DeventRoute: Int = 0, DirectionOfTravel: Int = 0, DutyNumber: Int = 0, ОбъектIdentifier: String = "", locationType: String = "", mode: String = "", nonStopStatus: Int = 0, RecordIdentifier: String = "", timetableIdentifier: Int = 0, trainNumber: String = "", tripNumber: Int = 0, tripStartSite: String = "", uniqueLocationCode: String = "") { self.name = имя self.arrivalTime = Время прибытия self.departureTime = Время отправления self.departureRoute = Маршрут отправления self.directionOfTravel = направлениепутешествия self.dutyNumber = номер обязанности self.facilityIdentifier = идентификатор объекта self.locationType = Тип местоположения self.mode = режим self.nonStopStatus = неStopStatus self.recordIdentifier = идентификатор записи self.timetableIdentifier = идентификатор расписания self.trainNumber = trainNumber self.tripNumber = номер поездки self.tripStartSite = tripStartSite self.uniqueLocationCode = уникальныйLocationCode } } для строки в CSVFile { var columnsValue = line.comComponents(separatedBy: ",") пусть timeTableDataEntry = TimetableData( прибытияВремя: Int(columnValue[0])!, отправлениеВремя: Int(columnValue[1])!, отправлениеRoute: Int(columnValue[2])!, DirectionOfTravel: Int(columnValue[3])!, долгНомер: Int(columnValue[4])!, Идентификатор объекта: значение столбца[5], Тип местоположения: значение столбца [6], режим: значение столбца[7], nonStopStatus: Int(columnValue[8])!, идентификатор записи: значение столбца[9], timetableIdentifier: Int(columnValue[10])!, номер поезда: значение столбца[11], tripNumber: Int(columnValue[12])!, tripStartSite: columnsValue[13], уникальныйLocationCode:columnValue[14] ) } Затем Тот же код, но без @Model, занимает всего 3 секунды.
class TimetableDataForTesting { вар прибытияВремя: Int = 0 вар отправленияTime: Int = 0 вар отправленияRoute: Int = 0 вар DirectionOfTravel: Int = 0 вар DutyNumber: Int = 0 вар объектИдентификатор: String = "" var locationType: String = "" режим вар: String = "" вар nonStopStatus: Int = 0 var RecordIdentifier: String = "" вар timetableIdentifier: Int = 0 вар trainNumber: String = "" вар tripNumber: Int = 0 вар tripStartSite : String = "" var uniqueLocationCode: String = "" init(arrivalTime: Int = 0, DeventTime: Int = 0, DeventRoute: Int = 0, DirectionOfTravel: Int = 0, DutyNumber: Int = 0, ОбъектIdentifier: String = "", locationType: String = "", mode: String = "", nonStopStatus: Int = 0, RecordIdentifier: String = "", timetableIdentifier: Int = 0, trainNumber: String = "", tripNumber: Int = 0, tripStartSite: String = "", uniqueLocationCode: String = "") { self.name = имя self.arrivalTime = Время прибытия self.departureTime = Время отправления self.departureRoute = Маршрут отправления self.directionOfTravel = направлениепутешествия self.dutyNumber = номер обязанности self.facilityIdentifier = идентификатор объекта self.locationType = Тип местоположения self.mode = режим self.nonStopStatus = неStopStatus self.recordIdentifier = идентификатор записи self.timetableIdentifier = идентификатор расписания self.trainNumber = trainNumber self.tripNumber = номер поездки self.tripStartSite = tripStartSite self.uniqueLocationCode = уникальныйLocationCode } } для строки в CSVFile { var columnsValue = line.comComponents(separatedBy: ",") пусть timeTableDataEntry = TimetableDataForTesting ( прибытияВремя: Int(columnValue[0])!, отправлениеВремя: Int(columnValue[1])!, отправлениеRoute: Int(columnValue[2])!, DirectionOfTravel: Int(columnValue[3])!, номер обязанности: Int(columnValue[4])!, Идентификатор объекта: значение столбца[5], Тип местоположения: значение столбца [6], режим: значение столбца[7], nonStopStatus: Int(columnValue[8])!, идентификатор записи: значение столбца[9], timetableIdentifier: Int(columnValue[10])!, номер поезда: значение столбца[11], tripNumber: Int(columnValue[12])!, tripStartSite: columnsValue[13], уникальныйLocationCode:columnValue[14] ) }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»