select 문을 취소하거나 중지 할 수 있는지 궁금한가요?초소형 SELECT 문을 중지/중단 할 수 있습니까?
나는 수액이 인 ultralite 데이터베이스이있는 응용 프로그램을 가지고 있습니다. 데이터베이스 연결 및 명령문은 싱글 톤 내에서 처리됩니다.
나는 백그라운드에서 무거운 READ
수술을 시작하는 경우가 있는데, 때로는 2-3 초가 걸리는 ViewController
입니다. ViewController
에서 일부 값을 변경하고 WRITE
-operation으로 저장하면 ViewController
가 취소됩니다.
내 문제는 내가 정말 빨리 해요 경우, 및/또는하여 WRITE
작업이 READ
-operation의 끝에 기다리고 있기 때문에 READ
-operation 아주 천천히, 내의 ViewController가 기각되지 않습니다. 따라서 UI는 몇 초 동안 정지합니다.
내 Google 검색 기술 덕분에 또는 가난한 ultralite 설명서, 아무도 알지, 현재 진행중인 SELECT
- 문법을 취소 할 수 있습니까? (보기가 종료되므로 더 이상 결과가 중요하지 않음) 또는 을 동시에 여러 번 허용 할 수 있습니까? 그 중요한 경우 READ
및 WRITE
작업은 서로 다른 테이블 작업
편집 : (질문 요약)
- 이 울트라과 동시에
READ
및WRITE
할 수 있습니까? - 그렇지 않은 경우 다른 해결책이 있습니까? 글쎄, 우리가 해결 방법을 발견,하지만이 질문에 대답하지 않습니다
UPDATE (상세)가 (이 순간 우리는 데이터베이스를 복제하는 테스트).
우리는 ShoppingCardListView
의 애플리케이션을 보유하고 있습니다 (항목은 초 광속 db에 저장 됨). 이보기에서 Freeform-ViewController
내에서 통계 데이터을 표시하는 항목 (배송일 변경, 금액 수 ...)을 변경할 수 있습니다.
이 통계는 무거운 READ
작업이며, 때로는 최대 5 초가 소요됩니다. 예를 들어 항목 수를 변경하고 DONE
버튼을 누르면 Freeform-ViewController
은 WRITE
- 작동 (UPDATE)을 시작하고 닫히고 ShoppingCard는 다시 데이터베이스을 얻기 위해 READ
으로 업데이트됩니다.
마지막 포인트는 좋지 않지만 우리는 READ
데이터베이스의 전체 쇼핑 카드 대신 하나의 항목 만 업데이트하는 FreeformVC
의 완료 핸들러를 구현했습니다. 이것은 효과가있는 것 같지만, 최선의 해결책은 아닙니다. 정말 빨리 클릭하면 데이터베이스에서 다시 읽으려는 경우 지연이 느껴질 수 있으므로 질문이 남아 있습니다 ....모든
백그라운드 대기열에 읽기/쓰기 작업을 넣으면 UI가 응답을 유지할 수 있습니다. 그랜드 센트럴 디스패치 (백그라운드 대기열에'dispatch_async'를 쓰고 읽기/쓰기가 완료되면 메인 대기열로 돌아 가기) 나 NSOperationQueue를 사용할 수 있습니다. 데이터베이스 클래스가 스레드로부터 안전한지 확인하십시오. –
@AaronBrager : 읽기/쓰기 작업이 백그라운드에 있습니다. 'READ'가 너무 오래 걸리면 문제가 발생하므로 두 번째 WRITE 문은 첫 번째 문항이 준비 될 때까지 기다려야한다. (
longilong
WRITE 문이있는 경우 배경을 지정하면 UI가 멈추지 않아야합니다. 주 스레드를 차단하는 것은 무엇입니까? –