2015-12-11 4 views
1

Я новичок в программировании на Android. Я реализовал Realm для моего простого трекера, однако размер файла вырос с 1,5 до 5 мб. Это нормально?Android Realm большой размер файла

Что я просто делал, добавлял в экземпляр царства на каждый класс с помощью oncreate, добавленный в realm.close() всякий раз, когда был шанс, что действие закончится. Также завернуты транзакции begin и commit вокруг каждого создания объекта.

Есть ли что-то, что я сделал не так, что закончилось массовым размером файла?

Спасибо!

Edit: я имею в виду размера APK

+0

Вы должны проверить, что находится внутри Realm DB, вы вставив несколько раз и т.д .. Нормально Realm с пустой БД увеличивает размер около 800 КБ. Чтобы просмотреть таблицы Realm, проверьте http://stackoverflow.com/a/34187414/3736955 –

+0

Спасибо человеку! Я обязательно займусь этим. – Petersicecream

ответ

3

Если вы затянувшиеся сделки, размер файла может увеличиться. См. «https://realm.io/docs/java/latest/#faq» («Размер файла большого размера») для объяснения и уменьшения размера файла.

0

Я исследовал & все пробовал, так что не тратьте впустую свое время. Есть 2 возможных решения:

1) Realm.compact (RealmConfiguration): Вы должны закрыть все подключения к базе данных Realm, которые были открыты, от деятельности, или где бы вы его создали. Затем вы должны вызвать Realm.compact (yourDb.getConfiguration()). Если каждое соединение закрыто перед этой компактной операцией, результат будет правдой, а база данных будет меньше, иначе она не изменит ее размер, а результат будет ложным.

2) мой вид compactDb: Второе решение основано на том, чтобы сделать какой-то «механизм обмена», который, возможно, будет иметь более низкую производительность (в некоторых больших файлах, считающихся в milisecond), но определенно решит проблему больших файлы и оставить в своей базе только необходимый размер области.

Я создал свою личную функцию «compactDb()», который будет: 1. взять мой дб (Царство), 2. скопировать его в какой-то новый файл с именем по умолчанию-compact.realm 3. удалить мой дб (царства) 4. копия-обратно по умолчанию файла-compact.realm к моим дб (новый файл с расширением области) 5. удаления по умолчанию-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 Дат abase будет изменено до реального размера ... Имейте счастливое кодирование :)

0

@geisshirt право. Realm представили метод public static boolean compactRealm(RealmConfiguration configuration) для уплотнения базы данных области.Вызов этого метода уменьшил размер моей базы данных от + 350 МБ до 1 МБ <

Документация доступна здесь: https://realm.io/docs/java/latest/api/io/realm/Realm.html#compactRealm-io.realm.RealmConfiguration-

Смежные вопросы