[英]Android Realm large file size
我是android編程的新手。 我為我的簡單成績跟蹤器實現了Realm,然而,文件大小從1.5mb增加到5mb。 這是正常的嗎?
我只是在每個使用oncreate的類中添加一個領域實例,只要活動有可能結束,就會在realm.close()中添加。 還圍繞每個對象創建包裝了begin和commit事務。
有沒有我做錯的東西,結果是巨大的文件大小?
謝謝!
編輯:我的意思是apk大小
@geisshirt是對的。 Realm引入了方法public static boolean compactRealm(RealmConfiguration configuration)
來壓縮領域數據庫。 調用此方法可將數據庫的大小從+ 350MB減少到<1MB
此處提供的文檔: https : //realm.io/docs/java/latest/api/io/realm/Realm.html#compactRealm-io.realm.RealmConfiguration-
如果您有長時間運行的事務,則文件大小可能會增加。 有關說明以及如何減小文件大小,請參閱https://realm.io/docs/java/latest/#faq (“大域文件大小”)。
我研究過並試過一切,所以不要浪費你的時間。 有兩種可能的解決方案:
1)Realm.compact(RealmConfiguration):您需要關閉所有已打開的Realm數據庫的連接,從活動或創建它的位置。 然后你應該調用Realm.compact(yourDb.getConfiguration())。 如果在此緊湊操作之前關閉每個連接,結果將為true,並且數據庫將更小,否則它將不會調整大小,結果將為false。
2)我的那種compactDb:第二種解決方案是基於做某種“交換機制”,可能會有較慢的性能(在一些大文件,以毫秒計),但肯定會解決大文件的問題,只留下必要的領域到您的數據庫的大小。
我創建了我的個人函數“compactDb()”,它將:1。取我的db(領域),2。將其復制到一個名為default-compact.realm的新文件中3.刪除我的db(領域)4。復制文件default-compact.realm to my db(new file with extension realm)5。刪除default-compact.realm,因為我們不再需要它們了
這個“復制東西”將刪除舊版本的數據庫並僅復制最后一個(數據庫的實際大小)。 由於下一步是刪除你當前的數據庫,那么你將擺脫那些文件... :)
這是我的代碼:
public void compactDb(String dbName){
try{
//move compacted db to new one...
Realm db = Realm.getInstance(getConfig(dbName));
File compactedFile = new File(db.getConfiguration().getRealmDirectory(), "default-compacted.realm");
compactedFile.delete();
db.writeCopyTo(compactedFile);
db.close();
Realm compactedDb = Realm.getInstance(getConfig("default-compacted.realm"));
File dbFile = new File(compactedDb.getConfiguration().getRealmDirectory(), dbName);
dbFile.delete();
compactedDb.writeCopyTo(dbFile);
compactedDb.close();
compactedFile.delete();
}catch (Exception e){
e.printStackTrace();
}
}
幫助函數,它將為我提供我通過代碼使用的所需配置:
private RealmConfiguration getConfig(String name) {
return new RealmConfiguration.Builder()
.name(name)
.schemaVersion(0)
.build();
}
該功能的用法是:
compactDb("default.realm");
並將您的Realm數據庫調整為實際大小...有一個快樂的編碼:)
如前面的答案中所述,有時需要使用default.realm文件,因為如果你做了很多領域操作它會增加。 我發現這個文件有1.7GB之后,用不同的線程處理很多寄存器。
如下所示,在將領域配置為緊湊之后,此文件已減少到<1MB。
但是,一種簡單的方法是在構建域配置時調用方法compactOnLaunch 。
Realm.init(this);
objRealmConfig = new RealmConfiguration.Builder()
.schemaVersion(2)
// WARNING: Use compact to reduce the size of default.realm. A Realm file usually contain free/unused space.
// This method removes this free space and the file size is thereby reduced
// If the app do a lot of operations with Realm, use this method to compact and release free/unused space.
// More details in: https://realm.io/docs/java/latest/api/io/realm/Realm.html#compactRealm-io.realm.RealmConfiguration-
.compactOnLaunch()
.build();
Realm.setDefaultConfiguration(objRealmConfig);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.