사이트에서 처음으로 영역을 읽었을 때 벤치 마크 테스트를보고 매우 흥분했습니다. 그러나 제한 부분에 이르렀을 때 2 분 동안 붙어서 "스레드 간 개체 공유 방지"에 대해 생각하고있었습니다. 안쪽에서, 그것은 영역을 위해 간다라고 나에게 이야기하고 있었다. 그러나 그 제한은 나를 뒤로 붙들고있다. 그래서 마침내 나는 모든 스레드에서 그 객체를 공유 할 수있는 일종의 래퍼를 구현하기로 결정했다.
여기 있습니다. 디스크에 읽고 쓰는 프로세스는 간단한 개체 생성보다 시간이 오래 걸립니다. 이것이 래퍼 생성과 관련된 부분입니다.
1) realmObject의 하위 클래스 객체는 객체가 생성 된 동일한 스레드에서 객체 액세스 규칙에 관계없이 원하는 위치에 만들 수 있습니다.
예컨대
XyzsubclassofRealmObject xyzObject = new XyzsubclassofRealmObject();
2)의 데이터베이스 작업
예를 행하는 방법이 객체 합격
insertOrUpdate(xyzObject);
//implementation
insertOrUpdate(XyzsubclassofRealmObject object) //you can make this method generic to accept any object that is subclass of RealmObject
{
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
XyzsubclassofRealmObject databaseObject = realm.copyToRealmOrUpdate(object);
//notice this copyToRealmOrUpdate method provides by Realm
realm.commitTransaction();
XyzsubclassofRealmObject copyObject = clone(databaseObject);
return copyObject;
}
3) 이제도가 RealmObject의
내가 copyToRealmOrUpdate에서 반환 된 databaseObject를 복제의 생각했다. 어떤 방법으로 인터페이스 (즉, 2 점)을 허용하기 때문에, 1 점은 날 도와왔다.대신에 다음과 같이 직접 복제 방법을 호출하는 I 데이터베이스 작업을 수행하는 대신 특정 모델에 일반적인 래퍼를 쓴
public static XyzsubclassofRealmObject clone(XyzsubclassRealmObject databaseObject)
{
XyzsubclassOfRealmObject obj = new XyzsubclassofRealmObject();
obj.setXyz(databaseObject.getXyz());
return obj;
}
, 나는 clone 메소드를 호출하는 반사 방법을 사용했다. 자신 만의 방법을 자유롭게 선택할 수 있습니다.
그게 전부입니다. 너 끝났어. 보시다시피, 우리는 데이터베이스 객체 대신에 복사 된 객체를 돌려 주며, 당신은 임의의 스레드에서 자유롭게 사용할 수 있습니다. :)
결론 : 많은 블로그와 게시물에서 트랜잭션 수행 중에 UI 스레드에서 사용하는 것이 성능면에서 훨씬 빠르다고합니다. 그러나 선택은 당신에 달려 있습니다. 애플리케이션 사용량이 증가 할 때까지 데이터베이스에서 얼마나 많은 데이터가 출입하는지 미리 알지 못합니다. 해당 트랜잭션이 UI를 느리게 만들 수있는 충분한 데이터를 가지면 그렇게됩니다. 또한 우리는 모든 개발자가 UI 스레드 대신 데이터베이스 스레드와 네트워크 작업을 수행하여 UI 상호 작용을 중단시키지 않도록 연습합니다.
독서의 과정과 디스크에 기록하는 것은 더 많은 시간
불행하게도 내가 많은 양의 데이터를 처리 한 후 간단한 객체 생성됩니다! 영역을 구현하기 전에 해당 기능이 망가질 때까지 기다릴 것입니다 –
귀하의 경우에는 "많이"얼마입니까? – bmunk
@ChristianMelChior : 안녕하세요. Realm은 사용자 정의 정렬 순서를 지원합니까? 예를 들어, 3 개의 필드가있는 테이블이 있습니다 : 지리적 위치의 이름, 위도와 경도. 현재 위치에서 거리에 따라 결과를 정렬하고 싶습니다 (사용자의 위치에 따라 다름). 감사합니다 – Rajat