Хобрук: Ваш путь к мастерству в программировании

Как проверить размер CoreData в Swift

Я храню данные в CoreData. Я хочу знать, каков размер всех CoreData в МБ. В основном требуется очистить все CoreData, как только оно достигнет 10 МБ. Я не нашел никаких рабочих ответов для этого. Я попытался использовать приведенный ниже код, но не смог получить размер.

public func getSqliteStoreSize(forPersistentContainerUrl storeUrl: URL) -> String {
    do {
        let size = try Data(contentsOf: storeUrl)
        if size.count < 1 {
            print("Size could not be determined.")
            return ""
        }
        let bcf = ByteCountFormatter()
        bcf.allowedUnits = [.useMB] // optional: restricts the units to MB only
        bcf.countStyle = .file
        let string = bcf.string(fromByteCount: Int64(size.count))
        print(string)
        return string
    } catch {
        print("Failed to get size of store: \(error)")
        return ""
    }
}

guard let storeUrl = self.managedObjectContext!.persistentStoreCoordinator!.persistentStores.first?.url else {
    print("There is no store url")
    return
}
print("The size of the store is: \(self.getSqliteStoreSize(forPersistentContainerUrl: storeUrl))")

Ссылка: Как получить размер имеющихся данных в хранилище основных данных?

Ниже приведен мой путь к coredata.

file:///var/mobile/Containers/Data/Application/XXXXXX-XXX-XXXX-XXXX-XXXXXXXXXX/Library/Application Support/APPNAME.sqlite

04.11.2020

  • Что происходит, когда вы пытаетесь использовать код, который не соответствует вашим ожиданиям? Какие сообщения об ошибках появляются, если они есть? 04.11.2020
  • Каждый раз, когда я получаю размер файла всего 0,01 МБ. 05.11.2020

Ответы:


1

Часть ответа заключается в том, что вам нужно подсчитать файлы журнала SQLite. Вот где на самом деле живет большая часть данных. Получение очень низкого числа является нормальным, если вы считаете только центральный файл SQLite. Вы найдете их, добавив .-wal и -shm к имени файла.

Другая проблема с вашим кодом заключается в том, что использование Data(contentsOf:) здесь действительно плохая идея, если ваши файлы хранилища не очень маленькие. Вы читаете весь файл в память, чтобы узнать, насколько он велик, а это не нужно. На вопрос, на который вы ссылаетесь, есть ответ, показывающий, как использовать FileManager (на самом деле NSFileManager там, поскольку это ObjC, но имена функций и аргументы одинаковы), чтобы получить размер без чтения файла.

Последняя проблема, которая может коснуться вас или не коснуться вас, заключается в том, что если у вас включена внешняя двоичная поддержка для любого атрибута в вашей модели, создаваемые внешние файлы не находятся ни в одном из файлов SQLite (в этом суть). Их тоже нужно считать. Местоположение не задокументировано, но это каталог с именем что-то вроде .APPNAME_SUPPORT/_EXTERNAL_DATA/. Если вам это нужно, попробуйте использовать сборку симулятора, чтобы вы могли легко просматривать файлы приложения и убедиться, что у вас все в порядке. Вы бы пересчитали каждый файл в этой папке.

05.11.2020

2

По умолчанию CoreData использует режим SQLite WAL (https://www.sqlite.org/wal.html), поэтому SQLite создает 3 файла для базы данных: обычный файл .sqlite, файл .sqlite-wal и файл .sqlite-shm. Вам нужно будет объединить размеры для всех этих.

05.11.2020
Новые материалы

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

React Hooks: основы деструктуризации массива
Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

Пакеты R, используемые в Tesla
Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

Сокращение и слияние токенов для эффективных моделей VL: обзор
Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..