Понимание потребления памяти на iPhone

Предупреждение: невозможно изменить информацию заголовка - уже отправленные заголовки

Случается, когда ваш скрипт пытается отправить HTTP-клиенту клиенту, но он уже был выведен ранее, что привело к тому, что заголовки уже отправлены на клиент.

Это E_WARNING , и он не остановит сценарий.

Типичным примером может быть файл шаблона, подобный этому:


    
    My Page

...

Функция session_start() попытается отправить клиенту файлы cookie сеанса. Но PHP уже отправил заголовки, когда он написал элемент в выходной поток. Вам нужно будет переместить session_start() в верхнюю часть.

Вы можете решить эту проблему, пройдя через строки до код, запускающий предупреждение, и проверьте, где он выдается. Переместите любой заголовок, отправляющий код перед этим кодом.

Часто пропускаемый вывод - это новые строки после закрытия PHP ?>. Считается стандартной практикой опускать ?>, когда это последняя вещь в файле. Аналогичным образом, еще одной распространенной причиной этого предупреждения является то, что перед открытием перед ним появляется пустое пространство, строка или невидимый символ, в результате чего веб-сервер отправляет заголовки и пробел / новую строку, таким образом, когда PHP начинает синтаксический анализ, он не сможет для отправки любого заголовка.

Если в вашем файле содержится более одного кодового блока , у вас не должно быть пробелов между ними. (Примечание: у вас может быть несколько блоков, если у вас есть код, который был автоматически сконструирован)

Также убедитесь, что в вашем коде не указаны знаки байтового заказа, например, когда кодировка скрипта является UTF -8 с BOM.

Вопросы, относящиеся

35
задан Community 23 May 2017 в 12:30
поделиться

4 ответа

Я очень сомневаюсь, что это ошибка в Instruments.

Сначала прочитайте эту запись в блоге Джеффа Ламарша о текстурах openGL:

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

Выдержка:

Текстуры, даже если они сделаны из сжатых изображений, используют много кучу памяти вашего приложения, потому что они должны быть развернуты в памяти, чтобы использоваться. Каждый пиксель занимает четыре байта, поэтому если забыть освободить текстуру данные изображения могут действительно съесть вашу память быстро.

Во-вторых, можно отлаживать текстурную память с помощью Instruments. Есть две конфигурации профилирования: OpenGL ES Analyzer и OpenGL ES Driver. Вам нужно будет запустить их на устройстве, так как симулятор не использует OpenGL. Просто выберите Product->Profile в XCode и найдите эти профили после запуска Instruments.


Вооружившись этими знаниями, вот что я бы сделал:

  • Убедитесь, что у вас нет утечки памяти - это, очевидно, вызовет эту проблему.
  • Убедитесь, что вы не обращаетесь к автоматически освобождаемой памяти - распространенная причина сбоев.
  • Создайте отдельное тестовое приложение и поиграйте с загрузкой текстур по отдельности (и в комбинации), чтобы выяснить, какая текстура (или их комбинация) вызывает проблему.

UPDATE: Подумав над вашим вопросом, я прочитал Apple's OpenGL ES Programming Guide, и там есть очень хорошая информация. Настоятельно рекомендую!

11
ответ дан 27 November 2019 в 15:47
поделиться

Один путь состоит в том, чтобы начать комментировать код и проверять, чтобы видеть, происходит ли ошибка все еще. Да это утомительно и элементарно, но могло бы помочь, знали ли Вы, где ошибка была.

то, Где это отказывает, - то, почему это отказывает, и т.д.

3
ответ дан Genericrich 27 November 2019 в 15:47
поделиться

Hrmm, это не много деталей, но если утечки не показывают Вам, где утечки, существует две важных опции:

[я] Утечки пропустили утечку [ii], память на самом деле не пропускается

фиксация [я] довольно тверд, но поскольку Eric Albert сказал, что регистрация отчета об ошибках с Apple поможет. [ii] означает, что память, которую Вы используете, все еще доступна где-нибудь, но возможно Вы забыли об этом. Какие-либо списки растут, не выводя старые записи? Какие-либо буферы являются перевыделением () редактор много?

2
ответ дан 27 November 2019 в 15:47
поделиться

Это конкретно не помогает Вам, но если Вы находите, что инструменты памяти не обеспечивают все данные, в которых Вы нуждаетесь, зарегистрируйте ошибку по bugreport.apple.com. Приложите копию своего приложения и описания того, как инструменты далеки от Вашего анализа, и Apple будет видеть, могут ли они улучшить инструменты. Спасибо!

0
ответ дан Eric Albert 27 November 2019 в 15:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: