Realm iOS: насколько дорого стоит запуск Realm с помощью встроенной БД? - PullRequest
0 голосов
/ 06 июня 2018

Я использую Realm для своего проекта, и мне нужно запросить список результатов в потоке без блокировки пользовательского интерфейса (т. Е. В фоне), только для чтения;Я проконсультировался с документом Realm, похоже, мне нужно создать экземпляр Realm в том же потоке, в котором он запрашивается, поэтому мне интересно, насколько дорого будет повторное создание объекта Realm каждый раз?

@IBAction func scoreAction(_ sender: Any?) {
    DispatchQueue.global(qos: .background).async }
        let scores = loadScore()
        DispatchQueue.main.async {
            display(scores)
        }
    }
}

затем:

func loadScore() -> [Score] {
    let realm = try! Realm(configuration: config)
    return realm.objects(Score.self).filter("some criteria")
}

1 Ответ

0 голосов
/ 06 июня 2018

Вызов инициализатора Realm на самом деле не создает новую базу данных, он просто создает новую ссылку на существующую базу данных Realm в местоположении, указанном в RealmConfiguration, используемом в инициализаторе Realm.Это означает, что в общем случае, когда база данных открыта, создание новой ссылки на нее с помощью вызова Realm() или Realm(configuration: config) не требует больших затрат в вычислительном отношении.Таким образом, в общем случае часто бывает более целесообразно создавать новую ссылку на свое Царство при переключении между потоками.

Конечно, чтобы точно знать, какой способ является более оптимальным для вашего конкретного варианта использования, вы 'На самом деле вам понадобится запускать тесты на реальном устройстве, но если вы не часто переключаетесь между потоками (скажем, несколько раз за одну секунду), вам будет хорошо с созданием новой ссылки на Realm в обоих потоках после переключения междуих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...