Realm ファイル サイズの縮小 - .NET SDK
Overview
時間の経過とともに、Realm で使用されるストレージ領域は断片化され、必要以上のスペースを消費する可能性があります。 内部ストレージの範囲を再確認してファイル サイズを縮小するには、Realm ファイルを圧縮する必要があります。
Realm のデフォルトの動作は、Realm ファイルが大きくなりすぎるのを防ぐために、ファイルを自動的に圧縮することです。 自動圧縮がユースケースに十分でない場合は、手動圧縮戦略を使用できます。
自動圧縮
バージョン 10.20.0 の新機能。
SDK は、ファイル内のデータを継続的に再割り当てし、未使用のファイル領域を排除することで、Realm ファイルをバックグラウンドで自動的に圧縮します。 自動圧縮は、ほとんどのアプリケーションの Realm ファイル サイズを最小限に抑えるのに十分です。
自動圧縮は、ファイル内の未使用領域のサイズがファイル内のユーザー データのサイズの 2 倍を超えると開始されます。 自動圧縮は、ファイルがアクセスされていない場合にのみ行われます。
手動圧縮オプション
手動圧縮は、ファイル サイズをより厳密に管理する必要があるアプリケーションや、自動圧縮をサポートしていない古いバージョンの SDK を使用するアプリケーションに使用できます。
Realm は、ファイルの新しい(圧縮)バージョンを書き込み、元のファイルを新しく書き込まれたファイルに置き換えることで、ファイル サイズを縮小します。 そのため、圧縮するには、元の Realm ファイル サイズと同等の空きストレージ領域が必要です。
Realm が開かれるたびにデータベースを自動的に圧縮するように Realm を構成することも、最初に Realm インスタンスを取得せずにファイルを圧縮することもできます。
Realm 構成ファイル
構成で ShouldCompactDeleteを指定することで、Realm ファイルを開くたびに Realm ファイルを確認するように Realm を構成できます。 次のコード例は、これを行う方法を示しています。
config = new RealmConfiguration() { ShouldCompactOnLaunch = (totalBytes, usedBytes) => { /* totalBytes refers to the size of the file on disk in * bytes (data + free space). * usedBytes refers to the number of bytes used by * the realm file */ // Compact if the file is over 100MB in size and less // than 50% 'used' var oneHundredMB = 100 * 1024 * 1024; return (totalBytes > (double)oneHundredMB) && ((double)usedBytes / totalBytes < 0.5); } }; var realm = await Realm.GetInstanceAsync(config);
削除が true
-- を返し、かつファイルが使用されていない場合 -- 、Realm ファイルは インスタンスを使用可能にする前に圧縮されます。
Realm.Compact() メソッド
あるいは、 Compat()メソッドを呼び出すと、最初に Realm への インスタンスを取得せずにRealm ファイルを圧縮できます。 次の例は、これを行う方法を示しています。
config = new RealmConfiguration("my.realm"); Realm.Compact(config);
操作が成功した場合、 Compact
メソッドは true を返します。
Realm を手動で圧縮するためのヒント
Realm を手動で圧縮すると、リソースが集中する操作になる可能性があります。 Realm を開くたびにアプリケーションが圧縮されないようにする必要があります。 代わりに、アプリケーションが圧縮を最適化して、ファイルサイズが大きくなりすぎるのを防ぐのに十分な頻度で圧縮を行います。 アプリケーションがリソースが制限された環境で実行されている場合、一定のファイルサイズに達したときや、ファイルサイズがパフォーマンスに悪影響を及ぼす場合は、圧縮する必要がある場合があります。
これらの推奨事項は、アプリケーションの圧縮の最適化を開始するのに役立ちます。
最大ファイルサイズを、平均 Realm 状態サイズの倍数に設定します。 平均的な Realm 状態サイズが 10 MB の場合は、予想される使用量とデバイスの制約に応じて、最大ファイル サイズを 20 MB または 40 MB に設定できます。
開始点として、Realm ファイルサイズの 50% 以上が使用されなくなった場合に Realm を圧縮します。 現在使用されているバイトを合計ファイルサイズで割った値で、現在使用されているスペースの割合を判断します。 次に、それが 50% 未満であるかどうかを確認します。 つまり、Realm ファイル サイズの 50% 以上が未使用領域であり、圧縮に適しています。 試すと、アプリケーションに最適なパーセンテージが異なることが見つかる場合があります。
これらの計算は、委任では次のようになります。
// Set a maxFileSize equal to 20MB in bytes var maxFileSize = 20 * 1024 * 1024; /* Check for the realm file size to be greater than the max file size, * or the amount of bytes currently used to be less than 50% of the * total realm file size */ return (totalBytes > (double)maxFileSize) && ((double)usedBytes / totalBytes < 0.5);
アプリケーション内の Realm ファイルを圧縮する頻度の適切なバランスを見つけるために、条件を試してください。