Un dominio es un conjunto de objetos relacionados que se ajustan a un esquema predefinido. Los dominios pueden contener más de un tipo de datos, siempre que exista un esquema para cada tipo.
Cada reino almacena datos en un archivo de reino independiente que contiene la codificación binaria de cada objeto del reino. Puedes... sincronizar un reino en múltiples dispositivos y configurar controladores de eventos reactivos que llamen a una función cada vez que se crea, modifica o elimina un objeto en un reino.
Realm Files
Realm almacena una versión codificada en binario de cada objeto y tipo en un reino en un solo .realm archivo. El archivo se encuentra en la ruta que define en el objeto RealmConfiguration al abrir el reino, o en la ruta predeterminada si no especifica una ruta.
El archivo de reino predeterminado se llama default.realm y se encuentra donde el sistema operativo almacena datos específicos de la aplicación.
Tip
Implemente la compactación en su aplicación de producción
Toda aplicación de producción debe implementar ShouldCompactOnLaunch para reducir periódicamente el tamaño del archivo de dominio. Para obtener más información sobre cómo compactar un dominio, consulte: Reducir el tamaño del archivo de dominio- SDK de .NET.
Auxiliary Realm Files
Realm crea archivos adicionales para cada realm:
archivos realm, con el sufijo "realm", por ejemplo,
default.realm: contiene datos de objetos.lock files, suffixed with "lock", e.g.
default.realm.lock: keep track of which versions of data in a realm are actively in use. This prevents realm from reclaiming storage space that is still used by a client application.note files, suffixed with "note", e.g.
default.realm.note: enable inter-thread and inter-process notifications.archivos de gestión, con el sufijo "gestión", por
default.realm.managementejemplo: gestión del estado interno.
Deleting these files has important implications. For more information about deleting .realm or auxiliary files, see: Delete a Realm.
Open a Realm Without Sync
Las siguientes secciones describen cómo abrir un archivo Realm para uso local (sin sincronización). Si te interesa usar sincronizar con tu Realm, consulta Configurar & Abrir un Realm sincronizado - .NET SDK.
Dominios locales
Al abrir un dominio local (no sincronizado), pase un objeto RealmConfiguration a GetInstanceAsync() GetInstance()o. El siguiente ejemplo crea un RealmConfiguration objeto con una ruta de archivo local, establece la IsReadOnly propiedad en true y, a continuación, abre un dominio local con esa información de configuración:
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}"); }
Dominios en memoria
Con un objeto InMemoryConfiguration, es posible crear un realm que se ejecute completamente en memoria (sin que los datos se escriban en el disco). El siguiente ejemplo muestra cómo hacerlo:
var config = new InMemoryConfiguration("some-identifier"); var realm = Realm.GetInstance(config);
In-memory realms might still use disk space if memory is running low, but all files created by an in-memory realm will be deleted when the realm is closed. When creating an in-memory realm, the identifier must be unique to all realms, including both in-memory and persisted realms.
Importante
When an in-memory realm is disposed or garbage-collected, the data is lost. To keep an in-memory realm "alive" throughout your app's execution, be sure to hold a reference to realm.
Explorando el reino
The realm instance implements IDisposable to ensure native resources are freed up. You should dispose of a realm object immediately after use, especially on background threads. The simplest way to do this is by declaring the realm object with a using statement, or wrapping the code that interacts with a realm in a using (...) statement:
config = new PartitionSyncConfiguration("myPart", user); using (var realm = Realm.GetInstance(config)) { var allItems = realm.All<Item>(); }
If you require a realm object to be shared outside of a single method, be sure to manage its state by calling the Dispose() method:
realm.Dispose();
Nota
As a general rule, you should dispose of the realm only on background threads, because disposing of a realm invalidates all objects associated with that instance. If you are data binding the realm objects on the main thread, for example, you should not call Dispose().
Class Subsets
Por defecto, todas las clases RealmObject se almacenan en un realm. En algunos escenarios, puede que desees limitar las clases que se almacenan, lo cual puedes hacer con la propiedad Schema del objeto RealmConfiguration. El siguiente código demuestra cómo se especifican dos clases que se desea almacenar en el realm:
var config = new RealmConfiguration() { Schema = new Type[] { typeof(AClassWorthStoring), typeof(AnotherClassWorthStoring) } };