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

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

Сообщение Гость »


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

Короче говоря, мой код Swift, который будет запускаться на iOS, выполняет только это, что создает таймер, вызывающий RealmLeaker.leak() каждые 0,1 с:

varleaker = RealmLeaker() // Здесь код пропущен для удобства чтения НавигацияВью { Текст("А") } .onAppear() { var timer1 = Timer.scheduledTimer(withTimeInterval: 0,1, повторы: true) { timerI в // Утечка утечка.утечка() } } Со стороны KMM — это класс RealmLeaker:

класс RealmLeaker { забавная утечка() { val config = RealmConfiguration.Builder(setOf(TestClass::class)) .строить() // Это должно просто открыть, а затем закрыть область. Обратите внимание: если вы прокомментируете все ниже этого, утечки не будет. область вал: Realm = Realm.open(config) область.закрыть() } } И для большего контекста, вот «TestClass», который я использую:

// Этот класс бесполезен. Только там для демонстрации утечки, ее свойства выходят за рамки задачи. класс TestClass: RealmObject{ @Основной ключ вар _id: строка = "0" значение переменной: логическое значение = ложь ключ var: String = «тест» } По логике, этот код должен просто открывать и закрывать Realm, не приводя к потере памяти, но заполняя мою оперативную и дисковую память.

Вот репозиторий для воспроизведения ошибки: GitHub — ALXgba/realmKMMIssue: утечка памяти с использованием Kotlin API в проекте KMM при запуске в среде iOS. 1

Я открыл проблему на странице MongoDB Realms GitHub, но, поскольку они еще не ответили, я надеюсь, что то, что я пропустил, может быть элементарным и что я смогу исправить это в своем коде, поскольку я хочу обойти это. выдать быстро. Вот страница проблемы: https://github.com/realm/realm-kotlin/issues/1501

Хотя проблема не кажется такой ужасной при использовании графиков отладки Xcode, они не показывают ясно, что размер приложения на диске также растет бесконечно, как было сказано ранее. Это означает, что пользователю придется периодически удалять и переустанавливать это приложение, если он хочет использовать его часто, при этом стирая Realm. Кроме того, объем используемой оперативной памяти, кажется, растет с небольшой скоростью, но я заметил, что в моем реальном приложении (не тестовом) он растет достаточно быстро, чтобы через час или около того произошел сбой, поскольку вся оперативная память засоряется.
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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