Проблемы с памятью PHP с исключениями, поддерживающими __setPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы с памятью PHP с исключениями, поддерживающими __set

Сообщение Anonymous »

Существует специальный класс исключений (для этой публикации я сократил его до минимума): нигде не используется; в исходной версии оно просто выдает \Exception и было введено для предотвращения случайной записи в $e->nonexistingproperty, которое уже устарело и, надеюсь, скоро будет запрещено в любом случае.
И есть фрагмент кода (который встроен в гораздо большую часть программного обеспечения):

Код: Выделить всё

try {
var_dump(memory_get_usage());
echo "
";
$e = new MyException();
var_dump(memory_get_usage());
echo "
";
throw $e;
}
catch (\Throwable) {
var_dump(memory_get_usage());
echo "
";
var_dump(get_class($e));
echo "
";
unset($e);
var_dump(memory_get_usage());
}
Запустив его, я получаю следующий результат (фрагмент начинается со строки 407 в реальном файле):

Код: Выделить всё

contextlevel.php:408: int(3207080)
contextlevel.php:411: int(3216336)
contextlevel.php:416: int(3473200)
contextlevel.php:418: string(11) "MyException"
contextlevel.php:421: int(3463904)
Выброс (а не создание!) исключения требует много памяти.
Если я удалю (нерелевантный __set ) выдача исключения по-прежнему требует много памяти, но теперь она освобождается с помощью unset($e). Почему? (Посмотрите на общее изменение объема памяти — всего лишь за счет удаления неиспользуемого метода защиты!)

Код: Выделить всё

contextlevel.php:408: int(2042552)
contextlevel.php:411: int(2051776)
contextlevel.php:416: int(2309016)
contextlevel.php:418: string(11) "MyException"
contextlevel.php:421: int(2057712)
Мне не удалось воспроизвести этот эффект на минимальном рабочем примере, потому что тогда числа (дрожания) были слишком низкими. Тем не менее, это на 100% воспроизводимо в моем реальном программном обеспечении.
Я могу и, конечно, откажусь от __get(), и, таким образом, проблема, которую я не смог правильно описать вчера, должна решить. Но все же мне было бы интересно, почему это происходит. Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/786 ... orting-set
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблемы с памятью PHP с исключениями, поддерживающими __set
    Anonymous » » в форуме Php
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Как использовать функцию Set Set State Set Set Satwerive AMD (ADL) (для программного переворачивания)
    Anonymous » » в форуме C#
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать Set> в Set?
    Anonymous » » в форуме JAVA
    0 Ответы
    65 Просмотры
    Последнее сообщение Anonymous
  • Android — в чем разница между оперативной памятью Android и оперативной памятью ПК
    Anonymous » » в форуме Android
    0 Ответы
    89 Просмотры
    Последнее сообщение Anonymous
  • Java Convert Map> в Map> [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    74 Просмотры
    Последнее сообщение Anonymous

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