Должен ли я открывать () и закрывать () свою базу данных SQL постоянно или оставить ее открытой? - PullRequest
25 голосов
/ 14 июня 2011

Я создаю приложение, которое использует базу данных SQL для хранения данных. При разработке приложения оно будет обновляться каждые 3 минуты или около того, добавляя новые данные в зависимости от действий пользователя во время работы приложения.

В уроках, которые я видел, они рекомендуют закрыть базу данных после ее изменения (это «дорого» с точки зрения ресурсов).

Лучше ли оставить его открытым на время моего приложения, поскольку оно обновляется довольно часто, или мне следует запускать метод close () сразу после каждого изменения?

Полагаю, меня беспокоит то, что, открывая и закрывая его постоянно, можно извлечь больше ресурсов, чем оставить его открытым все время.

Ответы [ 5 ]

5 голосов
/ 14 июня 2011

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

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

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

Соединения остаются в пуле соединений - я не в этом разбираюсь - но если бы мне было интересно узнать производительность, думаю, я бы учел это с точки зрения стоимости.открывать соединение несколько раз - в зависимости от того, чего требует ваша ситуация.

Другая мысль состоит в том, что администратор вашей БД может принудительно закрыть все открытые соединения, или БД может закрыться по какой-то другой причине.Если вы не dba, вы можете подумать о риске / выгоде зависимости от того, что вы не можете контролировать в течение длительного времени, например, от того, что соединение открыто.

3 голосов
/ 14 июня 2011

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

Если вы повторно запросите базу данных много В этом случае вы можете сохранитьбаза данных открыта.

Существуют ли другие приложения, обращающиеся к той же базе данных? Если существует риск возникновения проблем параллелизма или блокировки, может быть целесообразно закрыть базу данных после завершения чтения / записи из/ к нему.

Посмотрите на следующий URL

Когда закрывать соединение БД на Android?Каждый раз после завершения вашей операции или после выхода из приложения

Спасибо Deepak

3 голосов
/ 14 июня 2011

Допустим, у вас есть несколько операций с БД, которые нужно выполнять в одном потоке. Я бы оставил БД открытой для выполнения этих действий. Однако закройте БД после выполнения работы.

3 голосов
/ 14 июня 2011

Три минуты - это вечность на современных процессорах, даже на процессорах телефонов.Я бы закрыл его и открывал каждый раз.Это лучше, чем оставлять ручки в эфире.

1 голос
/ 14 июня 2011

если вы спросите меня обо всем, что я до сих пор читал об Android, и в целом лучше закрыть его сразу после внесения изменений.сделать и зарегистрировать контент-провайдера.У него есть свои цены, но я верю, что вы получаете намного больше, чем платите.С провайдером контента можно делать практически все, и пример блокнота на портале Android отлично подойдет для изучения того, как его реализовать.он заботится о синхронизации и открытии / закрытии базы данных.так что, возможно, посмотрите на это.

...