내 앱의 수명주기 동안 일련의 쿼리를 실행합니다.iOS 라이프 사이클에서 SQlite DB를 언제 열고 닫을 수 있습니까?
현재 FMDB (Objective-C wrapper는 Sqlite C API를 사용하고 있습니다.) 모든 쿼리를 열기 전에 닫고 있습니다.
FMDatabase * db = [FMDatabase databaseWithPath:pathToMyDB];
[db open]
FMResultSet * s = [db executeQuery:@"SELECT * FROM myTable"];
// Use FMResultSet
[db close];
개폐 트리거 fopen()
및 fclose()
아래로 낮은, 그래서 나는 열려있는 데이터베이스를 유지하여 억지로 승리를 얻을 수 보라.
그러나 임시 객체가 생성되어 메모리 문제가 발생할 수 있다고 생각합니다. Closing the database 임시 개체를 지 웁니다.
- 언제 데이터베이스 연결을 열어야합니까? (예 : 응용 프로그램이 backgound를 입력 했습니까?)
- 메모리 부족 상황에서 VACUUM을 실행해야합니까?
답변 해 주셔서 감사합니다. 데이터베이스가 어떤 객체를 생성 및/또는 보관하지 않는다는 것을 100 % 확신합니까? 당신은 아마 맞을 것이지만,이 문서는 다음과 같이 말합니다 : "sqlite3 객체가 성공적으로 소멸되고 관련된 모든 자원이 할당 해제되면 SQLite_OK를 반환 **"http://www.sqlite.org/c3ref/close.html – Robert
나는 생각한다. 관련 리소스는 연결 자체 및 액세스해야하는 몇 가지 사항을 참조합니다. 내가 말했듯이, 나는 잘 모르겠다. 서버 데이터베이스가 이것을한다. 그렇다면 다시 열 필요가 없습니다. 내가 말했듯이, 그것을 테스트하십시오 : 별도의 클래스 오픈 데이터베이스에서 우스운 양의 쿼리 (메모리를 보면서)를 수행 한 다음 닫습니다. 무슨 일이 일어나는지 분명해야합니다. 어떤 객체를 유지하면, 앱이 충돌 할 때까지 메모리가 계속 증가하는 것을 볼 수 있습니다. 모든 것이 상수 메모리 할당을 유지해야하는 경우가 아닙니다. 그것이 가장 쉬운 방법입니다. – skytz