Проблема с утечкой памяти KMM (RAM + Disk) при использовании MongoDB Realms в iOSIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с утечкой памяти KMM (RAM + Disk) при использовании MongoDB Realms в iOS

Сообщение Anonymous »

Раньше я использовал Java Realm для приложения для Android, которое недавно перенес на Kotlin Multiplatform, чтобы сделать его совместимым с iOS. После тестирования выяснилось, что при запуске в среде iOS моя память была перегружена утечкой, которая затронула как оперативную память, так и диск (который за несколько недель тестирования полностью заполнился, все 64 ГБ). Поэтому я сделал очень простую пониженную версию, которая демонстрирует, что именно в ней не так. Короче говоря, вызывая методы realm.open и realm.close, я теряю память (экземпляры realm_scheduler согласно моему графику памяти в Xcode, но все, что связано с областями, похоже, создает в нем слишком большое количество экземпляров).< /p>
Иллюстрация памяти Xcode
Короче говоря, мой код Swift, который будет запускаться на iOS, выполняет только это, что создает таймер, вызывающий утечку() из экземпляра RealmLeaker каждые 0,1 с:

Код: Выделить всё

    var leaker = RealmLeaker()
// Code skipped here for readability
NavigationView {
Text("A")
}
.onAppear() {
var timer1 = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { timerI in
// Leaking
leaker.leak()
}
}
Со стороны KMM, вот класс RealmLeaker:

Код: Выделить всё

class RealmLeaker {
fun leak() {
val config = RealmConfiguration.Builder(setOf(TestClass::class))
.build()

// This should simply open, then close the realm. Note that if you comment everything below this, there is no leak.
val realm: Realm = Realm.open(config)
realm.close()
}
}
И для большего контекста, вот «TestClass», который я использую на стороне Kotlin:

Код: Выделить всё

// This class isn't really useful. Only there to showcase the leak, its properties are outside the scope of the problem.
class TestClass : RealmObject{
@PrimaryKey
var _id : String = "0"

var value : Boolean = false
var key : String = "test"
}
По логике, этот код должен просто открывать и закрывать Realm, не приводя к потере памяти, но заполняя мою оперативную и дисковую память.
Вот репозиторий для воспроизведения ошибки: GitHub — ALXgba/realmKMMIssue: утечка памяти с использованием Kotlin API в проекте KMM при запуске в среде iOS. 1
Я открыл проблему на странице MongoDB Realms GitHub, но, поскольку они еще не ответили, я надеюсь, что то, что я пропустил, может быть элементарным и что я смогу это исправить в мой код, так как я хочу быстро обойти эту проблему. Вот страница проблемы: https://github.com/realm/realm-kotlin/issues/1501
Хотя проблема не кажется такой уж ужасной при использовании графиков отладки Xcode, что Из этого ясно не видно, что размер приложения на диске также растет бесконечно, как было сказано ранее. Это означает, что пользователю придется периодически удалять и переустанавливать это приложение, если он хочет использовать его часто, при этом стирая Realm. Кроме того, объем используемой оперативной памяти, кажется, растет с небольшой скоростью, но я наблюдал, как в моем реальном приложении (не тестовом) он растет достаточно быстро, чтобы через час или около того произошел сбой, поскольку вся оперативная память засоряется.

Подробнее здесь: https://stackoverflow.com/questions/771 ... lms-on-ios
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»