Мне еще предстоит найти элегантное решение для этого. У меня есть класс с методом, который я хочу отслеживать использование памяти без изменения функции:
class Example
{
public function hello($name)
{
$something = str_repeat($name, pow(1024, 2));
}
}
$class = new Example;
$class->hello('a');
Итак, задача в том, сколько памяти использует hello()
, не мешая ей?
Примечание. Использование этого метода памяти должно быть 1 МБ. Я пробовал обернуть вызов с помощью memory_get_usage();
безрезультатно:
class Example
{
public function hello($name)
{
$something = str_repeat($name, pow(1024, 2));
}
}
$class = new Example;
$s = memory_get_usage();
$class->hello('a');
echo memory_get_usage() - $s;
Это приводит только к 144
байтам (не совсем правильно). Я пробовал различную магию с Reflection, используя класс ReflectionMethod
.
У меня есть ощущение, что мне нужно сделать, это рассчитать разницу в методе:( Если кто-то может подумать о чем-нибудь более чистом, тогда вы действительно сделаете мой день.
Изменить: Я хотел бы упомянуть об этом в контексте приложения для бенчмаркинга. Таким образом, пока memory_get_peak_usage
работает в том смысле, что он правильно возвращает использование памяти, он также будет искажать контрольные тесты, запущенные после метода высокой памяти. Теперь, если бы существовал способ reset статистики памяти, это тоже может быть полезно.