Jak znaleźć pamięć używaną przez obiekt w PHP? (c's sizeof). Obiekt, o którym chcę się dowiedzieć, to słownik ze stringami i intami, więc trudno jest go obliczyć ręcznie. Również ciąg w php może mieć różną długość w zależności od kodowania (utf8 itd.), Poprawny?Jak znaleźć pamięć używaną przez obiekt w PHP? (sizeof)
Odpowiedz
Można użyć memory_get_usage().
Wykonaj jeden raz przed utworzeniem obiektu, a następnie ponownie po utworzeniu obiektu i wybierz różnicę między dwoma wynikami.
Nie wiem, że istnieje prosty sposób na uzyskanie rozmiaru obiektu w PHP. Może po prostu trzeba zrobić algorith że
- zlicza ints
- liczba Mnoży o wskazówki o wielkości int na dysku twardym
- Konwersja znaków w ciągach ASCII i
- pomnożyć wartości ASCII przez ile one zajmują na dysku
Jestem pewien, że jest lepszy sposób, ale to by działało, nawet gdyby to był ból.
Aby zorientować się o wielkości obiektów, spróbuj
strlen(serialize($object));
To bynajmniej nie jest dokładna, ale łatwym sposobem, aby uzyskać numer do porównania.
Jeśli potrzebujesz znać rozmiar już utworzonego obiektu lub macierzy, możesz użyć poniższego kodu, aby go znaleźć.
<?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);
?>
To w istocie tworzy kopię struktury tablicy i wszystkich jej członków.
nie 100%, ale nadal działa wersja jest również:
<?php
$old = memory_get_usage();
$dummy = unserialize(serialize($src));
$mem = memory_get_usage();
$size = abs($mem - $old);
nadzieję, że pomoże w przypadkach, gdy obiekt jest już budować.
- 1. Jak znaleźć pamięć używaną przez obiekt ruby?
- 2. r - Jak wyczyścić pamięć używaną przez rJava?
- 3. Czy Instruments wyświetla pamięć używaną przez UIWebView?
- 4. wierszu polecenia, aby uzyskać pamięć używaną przez proces
- 5. Jak zmodyfikować ścieżkę używaną przez exec w php
- 6. Jak znaleźć wersję Struts używaną w projekcie
- 7. Jak przechodzić przez obiekt SimpleXML w PHP
- 8. Jak mogę monitorować pamięć używaną przez określony proces w chmurze AWS?
- 9. Jak zmienić domyślną czcionkę używaną przez Silverlight?
- 10. Znaleźć rozmiar ciągu w argv używając sizeof
- 11. pamięć zużywana przez wektor łańcuchowy w C++
- 12. Jak znaleźć aktualną wersję QtWebKit używaną w Qt SDK?
- 13. Jak znaleźć wersję .NET używaną w istniejącym projekcie?
- 14. Jak programowo znaleźć pamięć w programie iPhone?
- 15. Jak mogę wysłać obiekt JSON przez cURL w php
- 16. LD_LIBRARY_PATH: jak znaleźć obiekt wspólny
- 17. Gdzie mogę zdefiniować domenę używaną przez url_for() w Flask?
- 18. Jak udostępnić pamięć między żądaniami HTTP w PHP?
- 19. jak znaleźć pamięć MAX ze statystyk dokowania?
- 20. Obiekt nadrzędny w php
- 21. Jak określić bieżącą rodzinę czcionek używaną przez Sublime Text 2?
- 22. Jak mogę skonfigurować instancję jsdom używaną przez żart?
- 23. Jak mogę uzyskać miniaturkę używaną przez Nautilus dla danego pliku?
- 24. Obiekt działający jak tablica? (PHP)
- 25. Jak określić czcionkę używaną przez przeglądarkę do renderowania tekstu?
- 26. Jak znaleźć obiekt po imieniu w pyqt?
- 27. W Selenie, jak znaleźć obiekt "Bieżący"
- 28. Jak uzyskać obiekt Jackson ObjectMapper w użyciu przez wiosnę 4.1?
- 29. Pętla przez obiekt słownikowy
- 30. Jaki jest sizeof (main), sizeof (printf), sizeof (scanf)?
Innym sposobem na zrobienie tego w pamięci jest pobierz pamięć, sklonuj obiekt, pobierz nowe użycie pamięci i usuń klon. Istnieje jednak ślad, więc nie nadużywaj ... :) –
Wierzę, że wynik, który otrzymujemy z 'echo memory_get_usage()' przed i po tablicy, jego jednostki przypuszczają być w 'KB' !! ! Podzielam rozmiar pamięci na 1024! Aby uzyskać rzeczywisty zużyty rozmiar pamięci. – Neocortex
nie jest w bajtach nie kb http://ca3.php.net/memory_get_usage –