3 votes

La question de la mémoire PHP doit-elle être annulée ?

Que se passe-t-il si on ne désactive pas un tableau avant que le script ait fini de s'exécuter ?

Je parcours des milliers de fichiers CSV, en analysant les données de centaines de milliers de clients dans des tableaux. Cela fonctionne bien pendant les 5/6 premières heures, puis commence à s'enliser.

J'exécute environ 5 à 10 CSV par exécution... Je me demande si la désactivation des tableaux dans le script aiderait ou non... Je pensais qu'ils seraient désalloués après la fin du script. Est-ce que je me trompe ?

1voto

RonLugge Points 1860

Pour autant que je sache, les tableaux - comme toute la mémoire - devraient mourir lorsque le script le fait.

Votre script PHP est-il invoqué par un autre script PHP ? Si vous le faites par 'include', cela prend essentiellement votre script PHP de niveau inférieur et le branche dans celui de niveau supérieur -- ce qui les ferait persister.

1voto

mcrumley Points 3551

Toute la mémoire est effacée lorsque le script se termine. Avez-vous essayé d'utiliser memory_get_peak_usage() y memory_get_usage() ? Ils peuvent être utiles pour trouver des problèmes d'allocation de mémoire.

0voto

bujakadev Points 1

Toute la mémoire utilisée doit être nettoyée après que le script se termine avec succès. Si ce n'est pas le cas, il s'agit d'un bug de PHP. Désactiver les tableaux n'aidera pas ici.

0voto

Matt Asbury Points 3768

Je pense que cela dépend de la version de PHP que vous utilisez. PHP 5.3 a un mécanisme de ramassage des déchets amélioré qui devrait empêcher cette fuite de mémoire. Cette page ( http://www.php.net/manual/en/features.gc.performance-considerations.php ) documente le problème dans les versions antérieures à 5.3 mais suggère que vous pouvez invoquer manuellement le garbage collection en utilisant la commande gc_collect_cycles() (si je l'ai bien lu).

0voto

Bjoern Points 7655

Unset détruit simplement une variable - il ne libère pas de mémoire. Si ce comportement se produit après des heures d'exécution, et qu'il s'agit d'un script unique, peut-être diviser les fichiers CSV en plus petits blocs pour accélérer les choses et aider à trouver où le problème commence à se produire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X