Configurar e abrir um Realm - .NET SDK
Nesta página
Um Realm é um conjunto de objetos relacionados que estão em conformidade com um esquema predefinido. Os domínios podem conter mais de um tipo de dados, desde que exista um esquema para cada tipo.
Cada Realm armazena dados em um arquivo de Realm separado que contém uma codificação binária de cada objeto no Realm. Você pode sincronizar automaticamente um Realm em vários dispositivos e configurar manipuladores de evento reativos que chamam uma função sempre que um objeto em um Realm for criado, modificado ou excluído.
Arquivos Realm
O Realm armazena uma versão codificada binária de cada objeto e digita um Realm em um único arquivo .realm
. O arquivo está localizado no caminho definido no objeto RealmConfiguration ao abrir o Realm ou no caminho padrão se você não especificar um caminho.
O Arquivo de Realm padrão é chamado default.realm
e está localizado onde o sistema operacional armazena dados específicos do aplicativo.
Dica
Implemente a compactação em seu aplicativo de produção
Todo aplicação de produção deve implementar o ShouldCompactOnLaunch para reduzir periodicamente o tamanho do arquivo do Realm . Para obter mais informações sobre como compactar um Realm, consulte: Reduzir o tamanho do arquivo Realm - .NET SDK.
Arquivos de Realm auxiliar
O Realm cria arquivos adicionais para cada realm:
arquivos realm, com sufixo com "realm", por exemplo
default.realm
: contém dados de objeto.lock, com sufixo "lock", por exemplo
default.realm.lock
: acompanhe quais versões dos dados em um domínio estão ativamente em uso. Isso impede que o domínio recupere espaço de armazenamento que ainda é usado por um aplicativo cliente.arquivos de nota, com sufixo com "nota", por exemplo
default.realm.note
: ative as notificações entre threads e entre processos.arquivos de gerenciamento, com sufixo de "gerenciamento", por exemplo
default.realm.management
: gerenciamento de estado interno.
Excluir esses arquivos tem implicações importantes. Para obter mais informações sobre a exclusão de .realm
ou arquivos auxiliares, consulte: Excluir um Realm.
Abra um Realm sem sincronização
As seções a seguir descrevem como abrir um Arquivo de Realm para uso local (não sincronizado). Se você estiver interessado em usar a sincronização com seu Realm, consulte Configurar e abrir um Realm sincronizado - .NET SDK.
Realms locais
Ao abrir um domínio local (não sincronizado), passe um objeto RealmConfiguration para GetInstanceAsync()
ou GetInstance()
. O exemplo a seguir cria um objeto RealmConfiguration
com um caminho de arquivo local, define a propriedade IsReadOnly
como true
e abre um domínio local com essas informações de configuração:
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}"); }
Realms na memória
Com um objeto InMemoryConfiguration , você pode criar um domínio que é executado inteiramente na memória (ou seja, sem os dados gravados no disco.) O exemplo a seguir mostra como fazer isso:
var config = new InMemoryConfiguration("some-identifier"); var realm = Realm.GetInstance(config);
Os Realms na memória ainda podem usar espaço em disco se a memória estiver fraca, mas todos os arquivos criados por um Realm na memória serão excluídos quando o Realm for fechado. Ao criar um Realm na memória, o identificador deve ser exclusivo para todos os Realms, inclusive Realms na memória e Realms persistentes.
Importante
Quando um Realm na memória é descartado ou coletado o lixo, os dados são perdidos. Para manter um Realm na memória "vivo" durante a execução do seu aplicativo, certifique-se de manter uma referência ao Realm.
Definindo o escopo do Realm
A Instância de Realm implementa o IDisposable
para garantir que os recursos nativos sejam liberados. Você deve descartar um Objeto de Realm imediatamente após o uso, especialmente em threads em segundo plano. A maneira mais simples de fazer isso é declarar o Objeto de Realm com uma declaração using
ou encapsular o código que interage com um Realm em uma declaração using (...)
:
config = new PartitionSyncConfiguration("myPart", user); using (var realm = Realm.GetInstance(config)) { var allItems = realm.All<Item>(); }
Se você precisar que um objeto de domínio seja compartilhado fora de um único método, certifique-se de gerenciar seu estado chamando o método Dispose () :
realm.Dispose();
Observação
Como regra geral, você deve descartar o Realm somente em threads em background, porque a eliminação de um Realm invalida todos os objeto associados a essa instância. Se você estiver vinculando dados aos Objeto de Realm na thread principal, por exemplo, não deverá chamar Dispose()
.
Subconjuntos de classes
Por padrão, todas as classes do RealmObject
são armazenadas em um domínio. Em alguns cenários, talvez você queira limitar as classes que são armazenadas, o que você pode fazer com a propriedade Esquema do objeto RealmConfiguration
. O código a seguir demonstra como você especifica duas classes que deseja armazenar no domínio:
var config = new RealmConfiguration() { Schema = new Type[] { typeof(AClassWorthStoring), typeof(AnotherClassWorthStoring) } };