2010-06-18 15 views
17
  • ¿Cuál es una forma adecuada de medir a PHP objetos tamaño real en bytes/kilobytes?

motivo para solicitar:
Estoy utilizando memcached para el almacenamiento caché en mi aplicación web que será utilizado por los clientes no técnicos. Sin embargo, dado que memcached tiene un maximum size of 1mb, sería genial tener una función configurada desde el principio que me permita medir el tamaño de los objetos/matrices/conjuntos de datos seleccionados, para evitar que crezcan demasiado.PHP: ¿mide el tamaño en kilobytes de un objeto/matriz?

Tenga en cuenta que solo planeo utilizar esto como una herramienta de alerta/diagnóstico para realizar un seguimiento del rendimiento de la memoria caché y las posibilidades de almacenamiento a lo largo del tiempo. Supongo que el cálculo de la velocidad en cada llamada memcached set/add reduciría un poco las cosas.

También soy consciente de almacenar grandes conjuntos de datos en memcached quita la idea de almacenar cosas en la memoria RAM, y esa es exactamente la razón por la que necesito saber de antemano para evitar que los clientes construyan grandes conjuntos de datos.

Muchas gracias

Respuesta

30

Bueno, ya que Memcached no almacena objetos primas (que realmente almacena la versión serialiezd), usted puede hacer esto:

$serializedFoo = serialize($foo); 
if (function_exists('mb_strlen')) { 
    $size = mb_strlen($serializedFoo, '8bit'); 
} else { 
    $size = strlen($serializedFoo); 
} 
+1

Eso será un byte de 16 bits debido a Unicode ¿verdad? –

+0

¡Hola! Eso es justo lo que estaba a punto de preguntar. ¿Cómo maneja UTF8 y los caracteres de bytes múltiples? – Industrial

+2

Bueno, todo depende. Si tiene sobrecarga la función mb_string, entonces tiene problemas. Si no, 'strlen' devolverá la longitud del byte (que es lo que quieres en primer lugar). Si tiene 'mbstring.func_overload' activado, puede usar' mb_strlen (serialize ($ foo), '8bit'); 'en lugar de strlen. Pero tenga en cuenta que mb_string debe estar instalado para usarlo. Voy a editar en una versión más robusta ... – ircmaxell

4

Otra manera fácil pute contenido de la matriz a archivo y luego verificar el tamaño del archivo.

$str = print_r($array, true); 
file_put_contents('data.txt', $str); 
$size = filesize('data.txt'); 
+1

¿Qué? ¡Nunca hagas eso! –

Cuestiones relacionadas