2016-06-29 5 views
1

を動作していないが、私はcompactRealm機能をテストするために書いた簡単なテストコードです。レルムアンドロイド:compactRealm予想通りここ

private void compactRealmTest(int count){ 
    Realm realm = Realm.getDefaultInstance(); 
    for(int i=0;i<count;++i) { 
     realm.executeTransaction(new Realm.Transaction() { 
      @Override 
      public void execute(Realm realm) { 
       Person p = Person.getRandomPerson(); 
       realm.copyToRealm(p); 
      } 
     }); 
     final RealmResults<Person> personList = realm.where(Person.class).findAll(); 
     realm.executeTransaction(new Realm.Transaction() { 
      @Override 
      public void execute(Realm realm) { 
       int size = personList.size(); 
       for(int i=0;i<size;++i){ 
        personList.deleteFirstFromRealm(); 
       } 
      } 
     }); 
    } 
    realm.close(); 
} 

この関数は、オブジェクトを挿入し、Realmからそのオブジェクトをただちに削除します。この関数が終了すると、領域dbにはオブジェクトが含まれません。この関数を実行した後にオブジェクトがなくても、領域ファイルのサイズは〜4.5MBになりました(compactRealmTest(1000)を呼び出した後)。私はcompactRealm()関数を呼び出して領域をコンパクト化することに決めました。ファイルサイズは〜4.5MBから3.5MBに縮小されました。レルムにオブジェクトがないのにレルムがまだ3.5MBを使用しているのはなぜですか?

+0

あなたはこの問題上の任意の答えや参照を取得しましたか? –

+0

私の解決策をお試しください: http://stackoverflow.com/questions/34217476/android-realm-large-file-size/42959238#42959238 –

答えて

0

レルムは現在、自動的にディスク上の領域を再利用しませんが、必要なときに代わりにスペースを再利用します。つまり、オブジェクトを再度追加すると、ファイルサイズの増加も見られません。

あなたは、ディスク上のファイルのサイズを最小限にしたい場合は、Realm.compactRealm(config)を使用することができます。https://realm.io/docs/java/latest/api/io/realm/Realm.html#compactRealm-io.realm.RealmConfiguration-

+0

私はcompact'は、スペースの1メガバイト(4.5メガバイトを再利用する理由 '彼の質問があると思います= > 3.5 MB)が、空の領域であってもそれ以上はありません。 – EpicPandaForce

+0

同じ問題。解決策は決まらない。 – SmallSani

関連する問題