Nasıl PHP bir nesne tarafından kullanılan bellek bulmak için?

4 Cevap php

Nasıl PHP bir nesne tarafından kullanılan bellek bulmak için? (C kullanıcısının sizeof). Ben öğrenmek istiyorum nesne bu yüzden zor elle hesaplamak için yapar dizeleri ve ints ile bir sözlüktür. Ayrıca php string (utf8 vb) doğru kodlayan bağlı olarak çeşitli uzunlukta olabilir?

4 Cevap

Sen kullanabilirsiniz memory_get_usage().

Lütfen nesnesi oluşturduktan sonra tekrar, sonra nesneyi oluşturmadan önce bir kez çalıştırın ve iki sonuç arasındaki fark almak.

Eğer önceden oluşturulmuş bir nesne ya da dizinin boyutunu bilmek gerekiyorsa, bunu öğrenmek için aşağıdaki kodu kullanabilirsiniz.

<?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);
?>

Bu aslında üyelerinin and Tüm dizi yapısının bir kopyasını oluşturur.

% 100 doğru, ama yine de çalışmıyor versiyonu da:

<?php

$old = memory_get_usage();
$dummy = unserialize(serialize($src));
$mem = memory_get_usage();

$size = abs($mem - $old);

Bu nesne zaten inşa durumlarda için yardımcı olur umarım.

Nesnelerin boyutu hakkında bir fikir edinmek için, deneyin

strlen(serialize($object));

Bu doğru hiçbir şekilde, ama karşılaştırma için bir numara almak için kolay bir yoldur.

PHP bir nesnenin boyutunu almak için basit bir yolu var olduğunu bilmiyorum. Sen sadece Algoritma yapmak zorunda olabileceğini

  1. İnts sayar
  2. Sabit diskte bir int büyüklüğüne göre ints sayısını çarpar
  3. ASCII dizeleri karakterleri dönüştürmek ve
  4. Onlar disk üzerinde de ne kadar tarafından ASCII değerleri çarpabilirsiniz

Bir ağrı olurdu olsa bile, ben daha iyi bir yol olduğundan emin değilim, ama bu işe.