Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Realm 구성 및 열기 - .NET SDK

이 페이지의 내용

  • Realm 파일
  • 보조 Realm 파일
  • 동기화 없이 Realm 열기
  • 로컬 Realm
  • 인메모리 Realm
  • Realm 범위 지정
  • 클래스 하위 집합

영역 은 사전 정의된 스키마 를 준수하는 관련 객체 설정하다 입니다. Realm은 각 유형에 대한 스키마 가 존재하는 한 두 가지 이상의 데이터 유형을 포함할 수 있습니다.

모든 영역 은 영역 의 각 객체 에 대한 바이너리 인코딩을 포함하는 별도의 영역 파일 에 데이터를 저장합니다. 여러 기기에서 영역 자동으로 동기화하고 영역 의 객체 가 생성, 수정 또는 삭제될 때마다 함수를 호출하는 반응형 이벤트 핸들러 를 설정하다 수 있습니다.

Realm 은 영역 에 있는 모든 객체 및 유형의 바이너리 인코딩 버전을 단일 .realm 파일 에 저장합니다. 파일 은 영역 을 열 때 RealmConfiguration 객체 에서 정의한 경로에 있으며, 경로를 지정하지 않은 경우 기본값 경로에 있습니다.

기본 Realm 파일의 이름은 default.realm 이며 OS가 앱별 데이터를 저장하는 위치에 있습니다.

프로덕션 애플리케이션에서 압축 구현

모든 프로덕션 애플리케이션 은 주기적으로 영역 파일 크기를 줄이기 위해 ShouldCompactOnLaunch 를 구현 해야 합니다. 영역 압축에 대한 자세한 내용은 Realm 파일 크기 줄이기 - .NET SDK 를 참조하세요.

Realm은 각 Realm에 대해 추가 파일을 생성합니다.

  • 'realm' 접미사가 붙은 영역 파일(예: default.realm: 객체 데이터를 포함합니다.

  • 잠금 파일, "lock" 접미사(예: default.realm.lock: Realm에서 활발하게 사용 중인 데이터 버전을 추적합니다. 이렇게 하면 Realm이 클라이언트 애플리케이션에서 아직 사용 중인 저장 공간을 회수할 수 없습니다.

  • 메모 파일, 접미사 '메모'(예: default.realm.note: 스레드 간 및 프로세스 간 알림을 활성화합니다.

  • 관리 파일, 접미사 "관리"(예: default.realm.management: 내부 상태 관리입니다.

이러한 파일을 삭제하는 것은 중요한 의미를 갖습니다. .realm 또는 보조 파일 삭제에 대한 자세한 내용은 Realm 삭제를 참조하세요.

다음 섹션에서는 로컬(비동기화) 사용을 위해 Realm 파일을 여는 방법을 설명합니다. Realm과 동기화를 사용하는 데 관심이 있는 경우 동기화된 Realm 구성 및 열기 - .NET SDK를 참조하세요.

로컬(동기화되지 않은) Realm을 열 때는 RealmConfiguration 객체를 GetInstanceAsync() 또는 GetInstance() 에 전달합니다. 다음 예제에서는 로컬 파일 경로가 있는 RealmConfiguration 객체를 만들고 IsReadOnly 속성을 true 로 설정한 다음 해당 구성 정보가 포함된 로컬 영역을 엽니다.

var config = new RealmConfiguration(pathToDb + "my.realm")
{
IsReadOnly = true,
};
Realm localRealm;
try
{
localRealm = Realm.GetInstance(config);
}
catch (RealmFileAccessErrorException ex)
{
Console.WriteLine($@"Error creating or opening the
realm file. {ex.Message}");
}

InMemoryConfiguration 객체를 사용하면 완전히 메모리에서(즉, 데이터를 디스크에 기록하지 않고) 실행되는 Realm을 만들 수 있습니다. 다음 예시는 이를 수행하는 방법을 보여줍니다.

var config = new InMemoryConfiguration("some-identifier");
var realm = Realm.GetInstance(config);

인메모리 영역은 메모리가 부족한 경우에도 디스크 공간을 사용할 수 있지만 영역이 닫히면 인메모리 영역에서 생성된 모든 파일이 삭제됩니다. 인메모리 영역을 생성할 때 식별자는 인메모리 영역과 지속형 영역을 모두 포함하여 모든 영역에서 고유해야 합니다.

중요

인메모리 영역이 폐기되거나 가비지 수집되면 데이터가 손실됩니다. 앱이 실행되는 내내 인메모리 영역을 '활성' 상태로 유지하려면 영역에 대한 참고를 유지해야 합니다.

Realm 인스턴스는 네이티브 리소스가 확보되도록 IDisposable 을(를) 구현합니다. 특히 백그라운드 스레드에서 Realm 객체를 사용한 후 즉시 처리해야 합니다. 이를 수행하는 가장 간단한 방법은 using 문을 사용하여 Realm 객체를 선언하거나 using (...) 문으로 영역과 상호 작용하는 코드를 래핑하는 것입니다.

config = new PartitionSyncConfiguration("myPart", user);
using (var realm = Realm.GetInstance(config))
{
var allItems = realm.All<Item>();
}

단일 메서드 외부에서 Realm 객체를 공유해야 하는 경우 Dispose() 메서드를 호출하여 해당 상태를 관리해야 합니다.

realm.Dispose();

참고

영역을 삭제하면 해당 인스턴스와 연결된 모든 객체가 무효화되므로 일반적으로 백그라운드 스레드에서만 영역을 삭제해야 합니다. 예를 들어 메인 스레드에서 영역 객체를 데이터 바인딩하는 경우 Dispose() 을(를) 호출해서는 안 됩니다.

기본적으로 모든 RealmObject 클래스는 Realm에 저장됩니다. 일부 시나리오에서는 저장되는 클래스를 제한해야 할 수 있으며, 이는 RealmConfiguration 객체의 스키마 속성을 사용하여 수행할 수 있습니다. 다음 코드는 Realm에 저장하려는 두 개의 클래스를 지정하는 방법을 보여줍니다.

var config = new RealmConfiguration()
{
Schema = new Type[]
{
typeof(AClassWorthStoring),
typeof(AnotherClassWorthStoring)
}
};

돌아가기

Realm 파일