2015-12-19 1 views
1

J'utilise Symfony2 pour mon projet et dans mon modèle, certaines entités sont tellement nombreuses (plus de 150 000 instances) J'utilise l'ORM Doctrine2 pour les persister dans le système de gestion de base de données MySQL le problème est qu'après avoir réparé une table avec seulement 26 000 lignes je ne peux plus charger une page de mon projet. Symfony2 lance l'erreur suivante chaque fois que j'ai édité le fichier php.ini en augmentant la taille de la mémoire de 128 à 512 M et effacer le cache.Symfony2 + Doctrine gère une grande taille de Data génère une erreur: Erreur: Taille de la mémoire allouée de 134217728 octets épuisés (tentative d'allocation de 5131594 octets)

error generated by Symfony (2.7) :OutOfMemoryException in Profile.php line 153:

Error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 5131594 bytes)

Notez que j'utilise aussi sonata-adminBundle pour gérer mes entités.

+1

Peut-être que vous devriez essayer d'optimiser la façon dont vous afficher/charger vos entités puis, en ne les chargeant tous par exemple à la fois. – Veve

+0

Je me suis rendu compte que dans la production mod tout fonctionne très bien mais l'erreur se produit toujours dans le mod de développement –

Répondre

2

Il y a au moins quatre façons de réduire l'utilisation de la mémoire:

1) appliquer éboueur pour faire son travail gc_collect_cycles();

2) gestionnaire d'entités clair pour détacher des objets si vous ne les avez pas besoin plus

$em->flush(); 
$em->clear(); 

3) désactiver l'enregistreur de données SQL, par exemple

$em->getConnection()->getConfiguration()->setSQLLogger(null); 

Here vous pouvez en lire un peu plus.

4) utiliser doctrine pagination où vous devez gérer un grand nombre d'entités

+1

+1, bien que je recommande ** jamais ** de faire la solution nr. 1 . Ce serait traiter le symptôme au lieu de la maladie. –

+0

@RaduMurzea merci pour le commentaire :) Eh bien, c'est à vous de quelle (s) façon (s) d'utiliser;) – sergekv

+0

Tout d'abord je vous remercie de votre aide Sergekv mais remarquez que symfony2 génère l'erreur lorsque je ne charge pas les entités et aussi quand charger toutes les enties il n'y a pas d'erreur du tout et la page qui utilise pour générer l'erreur ne fonctionne pas en utilisant le mode prod. Aussi j'ai édité php.ini et augmente la taille de memero et le temps d'exécution maximum ... –