Je fais une application qui doit stocker beaucoup de données en mémoire pour améliorer les performances de calcul.App se bloque lorsque QList devient trop grand
Il s'agit d'une hiérarchie de listes et d'objets dans laquelle l'objet supérieur est QList<myObject*>
. Lors du chargement des données, beaucoup d'instances de new myObject*
sont créées et ajoutées à la liste. La consommation de mémoire augmente et quand il s'agit de ~ 1.9Go le programme se bloque. Mon ordinateur (Vista) a 4 Go de RAM, et j'ai testé sur d'autres ordinateurs avec moins de RAM (XP) et il se bloque au même point. Puis-je ne pas utiliser plus de 1,9 Go de RAM?
Quand un fichier plus petit est chargé et que l'utilisation de la mémoire selon "Windows Task Manager" est de (disons) 1,2 Go, je peux travailler avec les données. Mais si je veux charger un autre fichier, la croissance commence à partir de 1,2 Go même après avoir appelé delete
sur tous les objets et effacer la liste. Pourquoi?
J'ai essayé de passer à QVector
et d'appeler le squeeze()
, mais la mémoire reste la même. J'ai lu les autres discussions sur l'allocation de mémoire dynamique dans QLists, mais est-ce vraiment impossible de réinitialiser la mémoire avant de charger un nouveau fichier? Surtout depuis qu'il se bloque après 1.9Gb; chargement de 3 petits fichiers séquentiellement et je suis là.
Merci beaucoup pour vos suggestions.
Etes-vous sûr que la suppression de votre objet fonctionne? Vérifiez le destructeur de votre objet. Essayez cppcheck http://sourceforge.net/projects/cppcheck/ Il peut détecter certaines fuites de mémoire. –