
Полная версия

dfhgakshdgk dgaehgkla
es_owqppqcfcvfcd
Глава 1
Глава 3. Баг, который любит большие файлы
Когда Мастер семи багов увидел строку OutOfMemoryError, он не удивился.
Память — это тихий враг мобильных приложений.
Она медленно заканчивается.Она не ломается сразу.
И когда это происходит — система падает не там, где проблема началась.
Он снова открыл тот же fb2 файл.
Но теперь сделал то, что редко делают обычные тестировщики.
Он посмотрел на размер книги.
742 KB.
Это было немного.
Такая книга не должна вызывать проблем.
Но пользователь ведь мог открыть другую.
Гораздо больше.
Мастер нашёл в своей тестовой коллекции огромный fb2 файл.
Энциклопедия.
Почти 25 мегабайт.
Он загрузил её на телефон.
Нажал «Открыть».
Приложение задумалось.
Секунда.
Две.
Пять.
И вдруг экран замер.
Потом приложение закрылось.
Мастер даже не смотрел лог.
Он уже знал, что там будет.
Но всё равно открыл.
OutOfMemoryError
Он улыбнулся.
Классика.
Он открыл код парсинга fb2.
И увидел знакомую строку.
String xml = readAllBytes(stream)
Это означало одну вещь.
Приложение читало весь файл целиком.
Сразу.
В память.
Для маленьких книг это нормально.
Но для больших — катастрофа.
Особенно на старых устройствах.
Он записал:
Баг №4 — чтение всего файла в память
Но Мастер не остановился.
Он продолжил читать код.
И увидел ещё одну проблему.
После чтения файл парсился целиком.
XML превращался в огромную структуру объектов.
Потом эта структура передавалась в рендерер.
То есть приложение держало две копии книги.
XML строку.
И дерево документа.
Он тихо сказал:
— А вот это уже интересно.
Он записал следующую строку.
Баг №5 — двойное хранение данных книги
Теперь всё становилось опаснее.
Потому что при книге в 25 MB приложение могло использовать больше 100 MB памяти.
И тогда система просто убивает процесс.
Он снова запустил приложение.
На этот раз открыл средний файл.
5 MB.
Книга загрузилась.
Но прокрутка стала медленной.
Он пролистал несколько страниц.
И заметил ещё одну странность.
Каждый раз, когда он перелистывал страницу, память снова росла.
Он открыл монитор памяти.
График выглядел как лестница.
10 MB.
20 MB.
30 MB.
40 MB.
Он кивнул.
Это был ещё один знакомый баг.
Объекты страниц не освобождались.
Каждая новая страница добавлялась в память.
Но старая оставалась.
Он написал:
Баг №6 — утечка памяти при перелистывании страниц
Теперь список выглядел так:
одноразовый поток
потеря разрешения
отсутствие локальной копии
чтение файла целиком
двойное хранение данных
утечка памяти страниц
Мастер посмотрел на блокнот.
Шесть багов.
И где-то рядом должен был быть последний.
Седьмой.
Но он пока не показывался.
Это было нормально.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.









