Comment trouver la mémoire utilisée par un objet en PHP? (taille de c). L'objet que je veux découvrir est un dictionnaire avec des chaînes et des entiers, donc il est difficile de le calculer manuellement. Aussi chaîne en php peut être de longueur variable en fonction de l'encodage (utf8 etc) correct?Comment trouver la mémoire utilisée par un objet en PHP? (sizeof)
Répondre
Vous pouvez utiliser memory_get_usage().
Exécutez-le une fois avant de créer votre objet, puis de nouveau après la création de votre objet et faites la différence entre les deux résultats.
Je ne sais pas qu'il existe un moyen simple d'obtenir la taille d'un objet en PHP. Vous pourriez avoir à faire une algorith que
- compte les ints
- nombre Multiplie de ints par la taille d'un int sur le disque dur
- Convertir des caractères dans les chaînes ASCII et
- Multiplier les valeurs ASCII par combien ils prennent sur le disque
Je suis sûr qu'il y a un meilleur moyen, mais cela fonctionnerait, même si ce serait une douleur.
Pour avoir une idée de la taille des objets, essayez
strlen(serialize($object));
Il est pas précis, mais un moyen facile d'obtenir un numéro de comparaison.
Cela pourrait avoir des utilisations, mais pas pour la mémoire. PHP <= 5.2 est profondément inefficace dans la façon dont il stocke certaines structures de mémoire. – danorton
J'utilisais ceci pour vérifier la réponse de json avant de l'envoyer, mais il épuise réellement ma limite de mémoire – clod986
Si vous avez besoin de connaître la taille d'un objet ou d'un tableau déjà créé, vous pouvez utiliser le code suivant pour le trouver.
<?php
function rec_copy($src) {
if (is_string($src)) {
return str_replace('SOME_NEVER_OCCURING_VALUE_145645645734534523', 'XYZ', $src);
}
if (is_numeric($src)) {
return ($src + 0);
}
if (is_bool($src)) {
return ($src?TRUE:FALSE);
}
if (is_null($src)) {
return NULL;
}
if (is_object($src)) {
$new = (object) array();
foreach ($src as $key => $val) {
$new->$key = rec_copy($val);
}
return $new;
}
if (!is_array($src)) {
print_r(gettype($src) . "\n");
return $src;
}
$new = array();
foreach ($src as $key => $val) {
$new[$key] = rec_copy($val);
}
return $new;
}
$old = memory_get_usage();
$dummy = rec_copy($src);
$mem = memory_get_usage();
$size = abs($mem - $old);
?>
Cela crée essentiellement une copie de la structure du tableau et tous ses membres.
A ne pas précis à 100%, mais la version de travail est aussi:
<?php
$old = memory_get_usage();
$dummy = unserialize(serialize($src));
$mem = memory_get_usage();
$size = abs($mem - $old);
espoir qui aide pour les cas où l'objet est construit déjà.
- 1. Découvrez la quantité de mémoire utilisée par un objet en Python
- 2. Déterminez la quantité de mémoire utilisée par une classe?
- 3. Comment trouver l'adresse mémoire d'un objet modèle Python/Django?
- 4. trouver un objet en Javascript
- 5. C#: utilisation de la mémoire d'un objet
- 6. Comment déterminer la quantité de mémoire principale utilisée par une application
- 7. Comment faire pour déterminer la quantité de mémoire utilisée par le code non managé
- 8. Calculer par programme la mémoire occupée par un objet Java y compris les objets qu'il référence
- 9. Comment libérer la mémoire qui a été utilisée pour une variable en C?
- 10. MySql & PHP: Comment trouver quelle ligne a un objet dans la première place d'une liste CSV?
- 11. Mesure du temps d'exécution et de la mémoire utilisée
- 12. C# sizeof decimal?
- 13. ligne de commande pour obtenir la mémoire utilisée par le processus
- 14. Comment puis-je changer la connexion utilisée par Castle ActiveRecord
- 15. Comment libérer la mémoire associée par CGImageCreateWithImageInRect
- 16. Comment trouver une chaîne dans un tableau en PHP?
- 17. Nourrir un objet Excel QueryTable de la mémoire
- 18. Comment trouver le module ou le script coupable sur l'utilisation de la mémoire résidente d'Apache/PHP?
- 19. Comment convertir un objet en type décrit par Type classe?
- 20. Comment trouver l'utilisation de la mémoire "fat" procédure?
- 21. Trouver un contenu en double en utilisant MySQL et PHP
- 22. Comment trouver tous les champs publics d'un objet en C#?
- 23. objet Convertir en entier en PHP
- 24. Que fait sizeof (char *)?
- 25. PHP en utilisant trop de mémoire
- 26. Comment obtenir l'utilisation de la mémoire sous Windows en C++
- 27. Gestion de la mémoire dans php
- 28. Mysql/php - Comment créer un objet ligne 'vide' pour la mise en cache
- 29. Convertir un objet en une chaîne en PHP
- 30. Limite de mémoire PHP
Une autre façon de le faire en mémoire est de obtenir l'utilisation de la mémoire, cloner l'objet, obtenir la nouvelle utilisation de la mémoire et désactiver le clone. Il y a une empreinte cependant, donc n'abusez pas ... :) –
Je crois le résultat que nous obtenons du 'echo memory_get_usage()' avant et après un tableau, ses unités supposent être dans 'KB' !! ! J'ai divisé la taille de la mémoire par 1024! Pour obtenir la taille de mémoire réelle consommée. – Neocortex
non c'est dans les octets pas kb http://ca3.php.net/memory_get_usage –