Отладочный навигатор Xcode бесполезен? - PullRequest
0 голосов
/ 05 февраля 2019

Я создаю приложение в XCode и теперь глубоко вхожу в часть управления памятью проекта.Когда я использую Распределения и Утечки, я, кажется, получаю совершенно другие результаты от того, что я вижу на панели отладки XCode: особенно панель отладки, кажется, показывает намного более высокое использование памяти, чем то, что я вижу в Распределениях, и это также, кажется, выдвигает на первый план утечки, которые насколькоЯ могу сказать, что (1) не существует, и (2) подтверждено, что инструмент Утечки не существует.Является ли эта вещь бесполезной, или, что еще хуже, вводит в заблуждение?

Вот новое: сегодня мне сказали, что я использую> 1 ГБ памяти, но ее маленький измеритель памяти показывал значительно <1 ГБ (и все еще ошибалсяесли данные Распределения точны).Изображение ниже. </p>

enter image description here

ОБНОВЛЕНИЕ: я запустил VM Tracker в течение 38-минутного сеанса, и кажется, что виртуальная память учитывает разницу между распределениями / утечкамии датчик памяти.Картинка ниже.Я не совсем уверен, как думать об этом пока.Наша игра использует очень большое количество текстур, которые меняются местами.Я предполагаю, что это распространено в большинстве игр нашего масштаба (11 досок, 330 уровней; каждая доска и экран карты имеют уникальное оформление).

enter image description here

1 Ответ

0 голосов
/ 05 февраля 2019

Возможно, вы используете Memory Gauge во время работы в симуляторе с использованием конфигурации сборки Debug.Оба из них дадут вам вводящие в заблуждение результаты памяти.Единственный надежный способ узнать, как управляется память, - это запустить на устройстве, используя сборку Release.Instruments использует конфигурацию сборки Release, поэтому она уже будет лучше, чем просто запуск и использование Memory Gauge.

Более того, это известный недостаток встроенных в память инструментов Xcode, таких как Memory Debugger, может генерировать ложные срабатывания для утечек.

Однако у инструментов есть и свои недостатки.Мой опыт показывает, что, например, он не может уловить утечки, возникающие при запуске приложения.Другая проблема заключается в том, что люди не всегда понимают, как читать его результаты.Например, вы говорите:

панель отладки, кажется, показывает намного более высокое использование памяти, чем то, что я вижу в Распределениях

Да, но Распределения - не вся история.Вы, вероятно, не можете посмотреть на распределение виртуальных машин.Они показаны отдельно и часто являются причиной высокого использования памяти (поскольку они включают резервные хранилища для изображений и дерево визуализации представления).Датчик памяти включает в себя виртуальную память, так что это одно может объяснить «разницу», которую, как вы думаете, вы видите.

Итак, ответ на ваш вопрос: нет, датчик памяти не бесполезен.Это дает довольно хорошее представление о том, когда вам может потребоваться быть готовым к проблеме с памятью.Но от вас ожидают, что вы переключитесь на инструменты для надлежащего анализа.

...