Bonjour, je me suis heurté à un gros problème de performance sur PHP.
Je travail sur des quantités énormes d'information contenu dans des objets. Tout semble optimisé, pas de copie mais des références, pas de superflus. Bref je ne pense pas pouvoir faire mieux mais malgrès ça, j'attend la memory_limit.
Je pourrais augmenter la limite mais je voudrais comprendre et essayer de corriger avant tout. Pour cela, j'ai simplifié mon script au maximum.
Voici à quoi j'arrive :
J'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 <?php class Test { private $_var ; public function __construct() { echo "NEW\n" ; $this->_var = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' . 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' . 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' . 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' . 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' . 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' . 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' . 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ; } public function __destruct() { echo "DESTROY\n" ; $this->_var = null ; } } echo memory_get_usage() . "\n" ; $toto = new Test() ; echo memory_get_usage() . "\n" ; unset($toto) ; echo memory_get_usage() . "\n" ; ?>
On peut voir que malgrès la destruction de l'objet, on a 1 Ko de de consommé pour rien.55208
NEW
56752
DESTROY
56336
Le pire c'est que je perd ce Ko à chaque instanciation.
Avec des centaines d'instanciation, ça explose.
Avez vous une explication ou des idées pour améliorer ?
Merci
Partager