xdebug

13/07/2016 - 18:08 von Stefan+Usenet | Report spam
Profiling eines Programms zeigt mir, dass mein generischer Getter
nach 19.000 Aufrufen knapp 8% der gesamten Ausführungszeit benötigt.
So weit, so gut.

Beim Quelltext erhalte ich dafür die folgende Anzeige (Kommentare im
Quelltext weggelassen und mangels c/p-Möglichkeit abgetippt - man
möge mir allfàllige Fehler nachsehen):

| 95.57 public static final function getProperty(String $propertyName) {
| if (!array_key_exists(get_called_class(), self::$baseClasses)) self::staticInit();
| 0.13 19011 call(s) to 'php::get_called_class' (php:internal)
| 0.13 19011 call(s) to 'php::array_key_exists' (php:internal)
|
| return self::$propertyDefinitions[get_called_class()]->getItem($propertyName);
| 0.10 19011 call(s) to 'php::get_called_class' (php:internal)
| 0.58 19011 call(s) to 'Framework\Collection->getItem' (collection.php)
| }

Das alles mit PHP7.0.

Nun kann man über die Idee, sàmtliche getter über ein Array von
Collections zu bedienen (aus Performance-Sicht) sicherlich geteilter
Meinung sein; die paar 1/10-Prozent sind für mich aber locker
verschmerzbar.

Das Ràtsel ist für mich eher: *was* um alles in der Welt benötigt
die 95,57%, den ausser Funktionsrumpf, "if", Array-Dereferenzierung
und einem "return" bleibt ja kein Code mehr übrig. Und wie kann das
um zwei Größenordnungen mehr Zeit benötigen, als die anderen
Operationen, die (zumal getItem) mindestens ebenso komplex sind?

Oder ist xdebug einfach nicht genau genug, und bei 8% auf 19k
Aufrufe der einzelne Aufruf so kurz, dass die Ergebnisse nur noch
gewürfelt sind? Dagegen spricht, dass sich das doch relativ gut
reproduzieren làsst.

Servus,
Stefan

http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

2016! Das Jahr des meisterhaften Durchbruchs von Stefan.
(Sloganizer)
 

Lesen sie die antworten

#1 Christoph M. Becker
14/07/2016 - 03:16 | Warnen spam
Am 13.07.2016 um 18:08 schrieb Stefan Froehlich:

Das Ràtsel ist für mich eher: *was* um alles in der Welt benötigt
die 95,57%, den ausser Funktionsrumpf, "if", Array-Dereferenzierung
und einem "return" bleibt ja kein Code mehr übrig. Und wie kann das
um zwei Größenordnungen mehr Zeit benötigen, als die anderen
Operationen, die (zumal getItem) mindestens ebenso komplex sind?



Ich tippe mal, dass sich hier einfach der Function-Call-Overhead
bemerkbar macht, siehe
<http://jpauli.github.io/2015/01/22/....html>.

Oder ist xdebug einfach nicht genau genug, und bei 8% auf 19k
Aufrufe der einzelne Aufruf so kurz, dass die Ergebnisse nur noch
gewürfelt sind? Dagegen spricht, dass sich das doch relativ gut
reproduzieren làsst.



Kann durchaus sein, dass Xdebug nicht genau genug ist. Auf jeden Fall
kann man Profilingergebnisse unter àlteren *Windows*-Versionen "in die
Tonne kloppen" (siehe <https://bugs.php.net/bug.php?idd633>).
Allerdings sind Deine geposteten Ergebnisse, glaube ich, nicht unter
Windows entstanden.

Übrigens schön, dass d.c.l.php noch nicht (ganz) tot ist. :-)

Christoph M. Becker

Ähnliche fragen