Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ /

配置并打开 Realm - .NET SDK

在此页面上

  • Realm 文件
  • 辅助 Realm 文件
  • 在没有同步的情况下开启 Realm
  • 本地 Realm
  • 内存 Realms
  • 确定 Realm 范围
  • 类子集

是一设立符合预定义模式的相关对象。 Realm 可以包含多种类型的数据,只要每种类型都存在模式。

每个域将数据存储在单独的域文件中,该文件包含域中每个对象的二进制编码。 您可以跨多个域自动同步 Realm,并设立响应式事件处理程序,以便在每次创建、修改或删除域中的对象时调用函数。

Realm将域中每个对象和类型的二进制编码版本存储在单个 .realm文件中。 该文件位于您打开域时在RealmConfiguration对象中定义的路径,或者如果您未指定路径,则位于默认路径。

默认 Realm 文件名为default.realm ,位于操作系统存储特定于应用的数据的位置。

提示

在生产应用程序中实施压缩

每个生产应用程序都应实现ShouldCompactOnLaunch以定期减小域文件的大小。 有关压缩域的更多信息,请参阅减少Realm文件大小 - .NET SDK。

Realm 会为每个 Realm 创建附加文件:

  • realm 文件,后缀为 "realm",例如 default.realm :包含对象数据。

  • 锁定文件,后缀为 "lock",例如 default.realm.lock :跟踪 Realm 中哪些数据版本正在使用中。 这可以防止 Realm 回收客户端应用程序仍在使用的存储空间。

  • note 文件,后缀为 "note",例如 default.realm.note :启用线程间和进程间通知。

  • 管理文件,后缀为“管理”,例如 default.realm.management :内部状态管理。

删除这些文件具有重要意义。 有关删除.realm或辅助文件的更多信息,请参阅:删除Realm。

以下部分介绍如何打开 Realm 文件以供本地(非同步)使用。如果您有兴趣在 Realm 中使用同步,请参阅配置和打开同步 Realm - .NET SDK。

打开本地(非同步)Realm 时,请将 RealmConfiguration对象传递给GetInstanceAsync()GetInstance() 。 以下示例将创建一个具有本地文件路径的RealmConfiguration对象,将IsReadOnly属性设置为true ,然后使用该配置信息打开一个本地 Realm:

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 仍可能使用磁盘空间,但关闭 Realm 时,将删除内存中 Realm 创建的所有文件。 创建内存中 Realm 时,标识符必须对所有 Realm 都是唯一的,包括内存中 Realm 和持久化 Realm。

重要

当内存中的 域 被释放或进行垃圾回收时,数据会丢失。要在应用程序执行过程中保持内存中 Realm 的“活动”状态,请务必保留对 Realm 的引用。

Realm 实例实现IDisposable以确保释放原生资源。您应该在使用 Realm 对象后立即对其进行处理,尤其是在后台线程中。 最简单的方法是使用using语句声明 Realm 对象,或在using (...)语句中包装与 Realm 交互的代码:

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

如果您需要在单个方法之外共享 Realm 对象,请务必通过调用Dispose()方法来管理其状态:

realm.Dispose();

注意

作为一般规则,您应该仅在后台线程上处置 Realm,因为处置 Realm 会使与该实例关联的所有对象失效。 例如,如果您在主线程上对 Realm 对象进行数据绑定,则不应调用Dispose()

默认情况下,所有RealmObject类都存储在一个 Realm 中。 在某些情况下,您可能希望限制存储的类,这可以使用RealmConfiguration对象的Schema属性来实现。 以下代码演示了如何指定要存储在 Realm 中的两个类:

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

后退

Realm 文件