php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.11.2009, 14:02  
¯\_(ツ)_/¯
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Mhh ich bin mir zwar nicht ganz sicher aber ich meine das wird so gehandhabt:

Wird eine Variable mit unset() gelöscht wird sie nur freigegeben. Der Speicher bleibt trotzdem noch belegt bis der GarbageCollector ihn wieder freigibt. Dies passiert entweder wenn der CPU mal Zeit hat oder PHP keinen Speicher mehr für die Skriptausführung hat.
Um eine Variable wirklich zu löschen (Speicher frei zu geben) muss man $var = null; setzen. Allerdings braucht dass dann auch mehr Rechenzeit.

Aber wie gesagt das ist nicht unbedingt richtig, keine Ahnung woher ich das gehört hab
Flor1an ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 01.11.2009, 22:59  
Benutzer
 
Registriert seit: 17.06.2009
Beiträge: 97
PHP-Kenntnisse:
Fortgeschritten
hondatuner befindet sich auf einem aufstrebenden Ast
Standard

Das ist mir schon klar, allerdings verstehe ich nicht den Unterschied bei der memory-Abfrage.

$var = null funktioniert meiner Ansicht nicht. Allerdings habe ich es auch noch nie getestet.
__________________
meine PHP Scripte
hondatuner ist offline  
Alt 02.11.2009, 00:05  
Benutzer
 
Registriert seit: 17.06.2009
Beiträge: 97
PHP-Kenntnisse:
Fortgeschritten
hondatuner befindet sich auf einem aufstrebenden Ast
Standard

Ok ich weiß jetzt was der Paramter bedeutet. Und zwar belegt PHP den Speicher immer blockweise. D.h. wenn man z.B. 900 KByte verbraucht hat, hat man in Wirklichkeit 1024 KByte verbraucht. Zumindest ist das auf meinem System jetzt so gewesen.

Wenn man nun den Speicherverbrauch optimieren will, sollte man memory_get_usage() ohne true benutzen. Am Ende des Prozesses sollte man sich aber noch mal memory_get_peak_usage() und memory_get_peak_usage(true) ausgeben lassen und versuchen den nächst geringeren Schritt zu erreichen. Wenn das nicht möglich ist, kann man sich die Optimierung gleich sparen, weil PHP wie gesagt einen gesamten Block belegt.
__________________
meine PHP Scripte
hondatuner ist offline  
Alt 02.11.2009, 00:26  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Flor1an Beitrag anzeigen
Mhh ich bin mir zwar nicht ganz sicher aber ich meine das wird so gehandhabt:

Wird eine Variable mit unset() gelöscht wird sie nur freigegeben. Der Speicher bleibt trotzdem noch belegt bis der GarbageCollector ihn wieder freigibt. Dies passiert entweder wenn der CPU mal Zeit hat oder PHP keinen Speicher mehr für die Skriptausführung hat.
Um eine Variable wirklich zu löschen (Speicher frei zu geben) muss man $var = null; setzen. Allerdings braucht dass dann auch mehr Rechenzeit.

Aber wie gesagt das ist nicht unbedingt richtig, keine Ahnung woher ich das gehört hab
problematischer wird das ganze, wenn man php per CGI am laufen hat. dann läuft ein PHP prozess der zwar intern speicher freigibt, aber eben nicht an das OS (bzw. erst bei "notwendigkeit"). memory managment eben.

und - wie du richtig sagst - erst wenn der GC anläuft gibt PHP speicher zurück. alles eine sache der optimierung, es ist wesentlich schneller einen systemaufruf zu sparen (vgl. Ring) und alles selber zu managen.

Zitat:
Wenn das nicht möglich ist, kann man sich die Optimierung gleich sparen, weil PHP wie gesagt einen gesamten Block belegt.
da php ein memory limit hat, stimmt das so nicht.
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline  
Alt 02.11.2009, 12:26  
Benutzer
 
Registriert seit: 17.06.2009
Beiträge: 97
PHP-Kenntnisse:
Fortgeschritten
hondatuner befindet sich auf einem aufstrebenden Ast
Standard

Du hast mich falsch verstanden. Ich meine, wenn man innerhalb eines 256er Blocks festhängt, also von 250kb auf 50kb optimieren könnte, so würde es im gesamten nichts bringen, da man immer noch einen gesamten 256er Block belegt.

Hier z.B. zwei Peak-Werte:
Zitat:
RAM: 10.0092 MB last - 14.314 MB peak - 14.5 MB real peak
Wie man sieht, ist real peak größer. Es ist also der gesamte Block gefüllt.

Ich will damit nur klar machen, dass es sich nicht immer lohnt unset() zu benutzen (also nicht für jeden Kleinkram), denn der Aufruf befreit zwar den RAM, belastet dafür aber wieder die Performance und am Ende schafft man vermutlich nicht mal einen gesamten Block.
__________________
meine PHP Scripte
hondatuner ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-tipps-2008/44996-speicherhandling-php-2.html, php speicher freigeben, php speicher optimieren, php memory leeren, php speicher leeren, php speicheroptimierung, speicherfreigabe php, php variablen aus speicher löschen, php variable speicherverbrauch, php prozess speicher freigeben, php variable aus speicher löschen, php variable aus speicher entfernen, php memory speicher leeren, speicher für php prozess, php variablen aus speicher entfernen php, notwendigkeit unset php, php hängt bei speicherfreigabe, php unset gibt speicher nicht frei, speicherverbrauch php woher?, php speicherverbrauch woher

Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.