¿Cómo encontrar la memoria utilizada por un objeto en PHP? (tamaño de c). El objeto que quiero averiguar es un diccionario con cadenas y entradas, por lo que es difícil calcularlo manualmente. También la cadena en php puede ser de longitud variada dependiendo de la codificación (utf8, etc.) correcta?¿Cómo encontrar la memoria utilizada por un objeto en PHP? (sizeof)
Respuesta
Puede usar memory_get_usage().
Ejecútelo una vez antes de crear su objeto, luego otra vez después de crear su objeto, y tome la diferencia entre los dos resultados.
No sé si hay una manera simple de obtener el tamaño de un objeto en PHP. Es posible que sólo tenga que hacer un algorith que
- cuenta los enteros
- número Multiplica de enteros de tamaño de un int en el disco duro
- convertir caracteres en cadenas a ASCII y
- Multiplicar los valores ASCII por cuánto ocupan en el disco
Estoy seguro de que hay una manera mejor, pero esto funcionaría, aunque sería un dolor.
para tener una idea del tamaño de objetos, tratan
strlen(serialize($object));
Es de ninguna manera exacta, sino una manera fácil de obtener un número para la comparación.
Si necesita saber el tamaño de un objeto o matriz ya creado, puede usar el siguiente código para encontrarlo.
<?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);
?>
Esto crea esencialmente una copia de la estructura matriz y todos sus miembros.
A, pero es todavía una versión de trabajo no es fiable al 100% también:
<?php
$old = memory_get_usage();
$dummy = unserialize(serialize($src));
$mem = memory_get_usage();
$size = abs($mem - $old);
Espero que ayude a los casos en que el objeto ya está construido.
- 1. Cómo encontrar la memoria utilizada por cualquier objeto
- 2. sizeof() en la memoria malloc'd
- 3. Borrado de la memoria utilizada por rpy2
- 4. Cómo obtener la memoria utilizada por un programa Delphi
- 5. r - ¿Cómo borrar la memoria utilizada por rJava?
- 6. Cómo modifico la ruta utilizada por exec en php
- 7. Averiguar cuánta memoria está siendo utilizada por un objeto en C#?
- 8. ¿Es necesario multiplicar por sizeof (char) al manipular la memoria?
- 9. Cómo implementar la memoria caché utilizada más recientemente
- 10. Does Instruments muestra la memoria utilizada por UIWebView?
- 11. Memoria Totalmente utilizada por Java ConcurrentHashMap (en Tomcat)
- 12. Obteniendo el tamaño en memoria de un objeto en PHP?
- 13. ¿Cómo obtener la memoria total en bytes utilizada por OpenGL en C++?
- 14. Eliminar la memoria de la variable no utilizada en java
- 15. ¿Cómo fuerzo mi std :: map para desasignar la memoria utilizada?
- 16. ¿Por qué readfile() agota la memoria PHP?
- 17. ¿Cómo encontrar la fuga de memoria en Java con JProfiler?
- 18. ¿Cómo calcular la memoria real utilizada por la variable de cadena?
- 19. ¿Cómo encontrar anotaciones en un objeto PHP5?
- 20. ¿Por qué sizeof (int) es diferente de sizeof (int *)?
- 21. Determinar la memoria utilizada por la caché asp.net en el alojamiento compartido
- 22. ¿Cómo liberar la memoria utilizada por las bases de datos inactivas de SQL Server?
- 23. Cómo obtener memoria disponible o utilizada en C#
- 24. ¿Cómo se ve un objeto en la memoria?
- 25. sizeof() estructuras desconocidas. ¿Por qué?
- 26. Encontrar la identificación única inferior no utilizada en una lista
- 27. Cómo determinar la memoria de un objeto C++ en tiempo de ejecución
- 28. por qué no hay sizeof en java
- 29. la memoria usada por un std :: string
- 30. ¿Cuál es la serialización predeterminada utilizada por ASP.net HttpRuntime.Cache
Otra forma de hacerlo mientras estás en la memoria es obtener el uso de la memoria, clonar el objeto, obtener el nuevo uso de la memoria y desarmar el clon. Sin embargo, hay una huella, así que no abuse ... :) –
Creo que el resultado que estamos obteniendo del 'echo memory_get_usage()' antes y después de una matriz, ¡sus unidades se supone que están en 'KB' !! ! ¡Dividí el tamaño de la memoria por 1024! Para obtener el tamaño real de la memoria consumida. – Neocortex
no, está en bytes no kb http://ca3.php.net/memory_get_usage –