Поиск утечек памяти реагирует нативное приложение (iOS)

1656680047 poisk utechek pamyati reagiruet nativnoe prilozhenie ios

Джигнеш Какадия

проблема:
Наше нативное приложение для реагирования хорошо работало на всех устройствах и, кроме iPhone 6, приводило к сбою. После высокоуровневого профилирования мы нашли, что это неувязка памяти. При использовании некоторых сложных функций в памяти программы было снято до 600+ МБ. А поскольку iPhone 6 имеет 1 ГБ оперативной памяти, iPhone автоматически отключает приложение.

решение:
Это то, что я сделал, чтобы уменьшить общее использование памяти программы с 600 МБ до 60 МБ.

  1. При профилировании утечек памяти нам нужно убедиться, что приложение создано по схеме выпуска. Поскольку сборка для разработчиков включает функции журналирования/предупреждения и горячей перезагрузки, они нам не нужны при проверке утечек. Вот как вы можете изменить сборку выпуска с помощью xcode.
  2. Начните отслеживать истоки
    Выделите XCode → Продукт → Профиль (⌘ + i)
    Появятся шаблоны профилирования. Пожалуйста, выберите то, что вам нужно.
    Выберите Leaksи нажмите на choose.
cDoGQtXWVyDoua8UUIIqNsjlJaLzyE62nXhD
Список профайлеров

3. Это должно открыть профиль утечек на вашем экране. Затем вы можете нажать на ‘красную точку’ в верхнем левом углу перезапустите приложение в симуляторе и вы можете начать играть с приложением.

fxTsPg0wyIhD6GNGdWCq020cNQhZTWPp13Ha

4. Вот как это выглядит после выполнения некоторых движений по экрану и операциям карусели. Я понял, что когда я перехожу на экран карусели и выбираю изображение из карусели из 12 изображений, память разворачивается для каждого отдельного изображения. Результат ниже показывает нам память, занимаемую объектами изображения «в памяти».

6A-UcrCs6eyxJtaQ0LKLQGSaYGw8hHZgnIeg

5. Поиск причин.
Мы использовали пакет react-native-fast-image для кэширования изображений на этом экране, и поскольку у react-native нет «лучшего» способа кэшировать полученные изображения, мы в конце концов использовали react-native-fast-image. Поэтому я решил удалить этот замечательный пакет из своей программы и результат был шокирующим. Вот так смотрится результат после его удаления.

MaLE0gA8bGNEq95gdnUPP3iOT0kvHWWlQldK

PS: Чтобы знать, мы использовали react-native-cached-image, который не сохраняет изображение в памяти.

Если вы создаете что-то с помощью react-native и нуждаетесь в помощи. Пожалуйста, дай мне знать.

Добавить комментарий

Ваш адрес email не будет опубликован.