Как часто я должен сохранить к Базовым Данным?

Я работаю над приложением, поддержанным Базовыми Данными. Прямо сейчас я сохраняю Контекст объекта как и когда я добавляю или удаляю объект к и от Контекста. Я боюсь, что это будет влиять на производительность, таким образом, я думал о задержке сохранения. На самом деле я мог задержать все это путь, пока приложение не собирается завершаться. Действительно ли это слишком опасно для сохранения данных только, когда приложение собирается закрыться? Как часто я должен назвать сохранение на Контексте объекта?

Я думал о наличии отдельного дескриптора потока сохранение: это будет ожидать на семафоре. Каждый раз, когда любая часть приложения называет helper/util метод для сохранения Базовых Данных, это постепенно уменьшит семафор. То, когда это до нуля, "сохраняют поток", сделает сохранение однажды, и это увеличивает семафор к, скажем, 5, и затем спите снова.

Какая-либо хорошая рекомендация?Спасибо!

13
задан MPelletier 9 September 2010 в 02:30
поделиться

2 ответа

Вы должны часто сохранять. Фактическая производительность операции сохранения во многом зависит от того, какой тип постоянного хранилища вы используете. Поскольку бинарные и XML-хранилища являются атомарными, их необходимо полностью переписывать на диск при каждом сохранении. По мере роста графа объектов это может замедлить работу приложения. Хранилище SQLite, с другой стороны, гораздо проще записывать на диск постепенно. Поэтому, хотя некоторые данные будут записываться не только для сохраняемых объектов, накладные расходы будут гораздо меньше, чем при использовании атомарных типов хранилищ. Сохранения, затрагивающие только несколько объектов, всегда будут быстрыми, независимо от общего размера графа объектов.

Тем не менее, если вы импортируете данные, скажем, в цикле, я бы подождал окончания всей операции для сохранения, а не сохранял на каждой итерации. Вашей главной целью должно быть предотвращение потери данных. (Я обнаружил, что пользователей это не очень волнует!) Производительность должна быть на втором месте. Возможно, вам придется проделать некоторую работу, чтобы сбалансировать частоту сохранения и производительность, но решение, которое вы описали выше, кажется излишним, если только вы не выявили конкретную и значительную проблему производительности.

10
ответ дан 2 December 2019 в 01:20
поделиться

На мой взгляд, лучший способ - сохранять после каждого объекта. Если что-то случится, например, внезапная авария, ничего не будет потеряно.

Некоторые улучшения производительности, если вы добавляете много объектов в пакетном режиме. Добавьте все объекты в контекст, чем сохраните. Это хорошо, например, если вы добавляете много объектов в цикл. Ваша идея похожа, но между сохранениями может быть много времени, при котором программа может вылететь.

Я не думаю, что добавление одного объекта вызовет серьезные проблемы с производительностью. Насколько велики ваши объекты, содержат ли они много данных?

0
ответ дан 2 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: