Bonjour à vous tous,
Je viens vers vous car je me retrouve face à un problème de taille en PHP.
L'application que je suis en train de coder doit pouvoir gérer une liste d'objets. Alors vous allez me dire, facile en PHP, le problème n'est pas là c'est que j'en ai ~ 700.000, et la mémoire consommée approche des 800 Mo
Voici un code reproduisant l'allocation des 700.000 objets.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class MyObject { protected $n; protected $list; function __construct($n, $list) { $this->n = $n; $this->list = $list; } }
À la découverte de ce problème, j'ai tenté d'ajouter à ma liste directement le tableau sans passer par l'encapsulation dans un objet. Mais la mémoire consommée est toujours d'un ordre de grandeur d'un autre monde (300 Mo).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $objects = array(); for($i =1 ; $i<=700.000 ; $i++) { $objects[] = new MyObject($i, array(1, 2, 3, 4, 5)); }
J'ai aussi essayé en utilisant une implémentation d'une liste chainée pour éviter d'utiliser les array, mais le problème est le même, la mémoire utilisée par PHP reste énorme.
Bref, venant du monde du C, je suis un peu effaré de voir la taille allouée en mémoire. Alors soit PHP n'est pas fait pour ça, soit mon code n'est pas correct, alors à votre avis ?
À titre de comparaison en C on aurait besoin de ((n = 4 octets) + (list = (4 octets x 5)) + (pointeur sur la liste = 4 octets)) x 700.000 = ~ 18 Mo.
Pour info j'utilise la version PHP 5.1.2 sous Windows XP.
Partager