108 votes

Comment déterminer l’encombrement de la mémoire (taille) d’une variable ?

Y a-t-il une fonction en PHP (ou une extension PHP) pour savoir combien de mémoire utilise une variable donnée ? ``m’indique juste le nombre d’éléments/propriétés.

EDIT : `` aide à qui il donne moi la taille de la mémoire utilisée par le script . Y a-t-il un moyen de faire cela pour une seule variable ?

96voto

Tatu Ulmanen Points 52098

Il n'y a pas de moyen direct d'obtenir l'utilisation de la mémoire d'une seule variable, mais comme Gordon suggéré, vous pouvez utiliser memory_get_usage. Qui sera de retour le total de la quantité de mémoire allouée, de sorte que vous pouvez utiliser une solution de contournement et de mesurer l'utilisation avant et après pour obtenir l'utilisation d'une seule variable. C'est très orthodoxe, mais il devrait fonctionner.

$start_memory = memory_get_usage();
$foo = "Some variable";
echo memory_get_usage() - $start_memory;

Notez que ce n'est pas une méthode fiable, vous ne pouvez pas être sûr que rien d'autre ne touche la mémoire, tout en affectant la variable, donc cela ne devrait être utilisé comme une approximation.

Vous pouvez réellement faire une fonction par la création d'une copie de la variable à l'intérieur de la fonction et de la mesure de la quantité de mémoire utilisée. N'ai pas testé, mais en principe, je ne vois rien de mal à cela:

function sizeofvar($var) {
    $start_memory = memory_get_usage();
    $tmp = unserialize(serialize($var));
    return memory_get_usage() - $start_memory;
}

26voto

Aistina Points 6720

Non, il n’est pas. Mais vous pouvez `` et vérifier la `` du résultat pour une approximation.

21voto

para Points 207

En réponse à Tatu Ulmanens réponse :

Il est à noter que lui-même se saisira de mémoire ( ).

Si la fonction entière doit devenir :

Désolé d’ajouter ceci comme une réponse supplémentaire, mais je ne peux pas encore commenter une réponse.

4voto

Gordon Points 156415

Voir:

Notez que cela ne vous donnera pas l'utilisation de la mémoire d'une variable spécifique.

Vous pourriez aussi avoir un coup d'oeil à l' extension PECL Memtrack, si la documentation est un peu défaut, si ce n'est-à-dire, pratiquement inexistant.

2voto

Alan Bellows Points 435

J’ai eu un problème similaire, et la solution que j’ai utilisé était d’écrire la variable dans un fichier, puis exécutez filesize() là-dessus. À peu près comme ce (code non testé) :

Cette solution n’est pas terriblement rapide parce qu’il s’agit d’e/s disque, mais il devrait vous donner quelque chose de beaucoup plus exact que les trucs de memory_get_usage. Cela dépend juste à combien de précision, vous avez besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X