Lorsque j'essaie d'envoyer des images en tant que pièces jointes (taille résumée ~ 4 Mo) en utilisant MFMailCompose, le moniteur d'activité indique quelle mémoire de 100 (+ - 2) Mo est utilisée. Après l'envoi ou l'annulation de la mémoire est libère ~ 20 mégaoctets, mais ce qui est arrivé aux 80 mégaoctets restants si l'élément partagé avec des images est libéré? Merci! :)MFMailComposeViewController utilise trop de mémoire
Répondre
La taille du fichier d'une image et la quantité de mémoire qu'elle consomme lorsqu'elle est affichée sont deux choses complètement différentes.
Les images telles que JPEG et PNG sont compressées. Quand ils sont attirés à l'écran, ils ne sont pas compressés.
Une règle rapide de pouce pour trouver la quantité de mémoire une image consommera lors de l'affichage est
memory consumed = (width * height) * 4
exemple, une image qui est de 2 Ko sur le disque, mais est de 62 x 52 pixels consommeront effectivement 12896 octets ou 12 Ko. J'imagine qu'une image de 4 Mo sur un disque consommera plus de 4 Mo. Le problème est que MFMailComposer affiche les images dans sa vue composer lorsque vous les ajoutez en tant que pièces jointes et que, par conséquent, elles sont décompressées et consomment de la mémoire. Ainsi, vos 4 Mo d'images consomment beaucoup plus que ce que vous pensez.
Essayez peut-être d'envoyer une seule image à la fois. Vous devez également être conscient que vous libérez les images et le MFMailComposeViewController lorsque vous en avez fini avec eux, ou que ce serait sûrement la source de la fuite.
Sachez également comment vous chargez initialement vos images. UIImage
imageNamed:
méthode met en réalité des images en cache. Les images mises en cache ne sont purgées que dans des situations où la mémoire est insuffisante. Elles peuvent donc rester en attente pendant un certain temps si vous ne respectez pas les limites.
Enfin, vous avez remarqué que vous observez la consommation de mémoire dans Instruments, mais avez-vous vérifié qu'il s'agit effectivement d'un problème? Vous rencontrez des plantages d'applications en raison de la mémoire insuffisante lors du test de votre application alors que n'est pas connecté à Instruments ou au débogueur?
Aucun corps n'est parfait - et cela vaut aussi pour Apple. Il y a eu des cas documentés dans le passé où les cadres d'Apple ont montré des fuites de mémoire (la mise en cache de UIImage
a fui dans iOS 2.x), mais je ne serais pas si prompts à blâmer les frameworks quand vous remarquerez un pic de consommation de mémoire. Si l'instrument de fuite ne montre aucune fuite et que l'analyseur ne montre aucun problème, le scénario le plus probable est qu'il s'agit simplement d'une consommation de mémoire et non d'une fuite.
Il est important de se rappeler que les appareils iOS ne disposent pas de gigaoctets de RAM comme les ordinateurs. Vous devez être prudent avec la mémoire que vous utilisez. Si cela signifie ne pas envoyer XX Mo d'images en même temps, alors c'est comme ça que ça doit être.
- 1. L'animation UIimageView utilise trop de mémoire
- 2. L'émulateur utilise trop de RAM
- 3. SQLServer utilisant trop de mémoire
- 4. Mon application Android prend trop de mémoire?
- 5. EXC_BAD_ACCESS: trop de mémoire allouée?
- 6. Knockout.js consommant trop de mémoire
- 7. La requête MySQL utilise trop de CPU
- 8. Photoshop/InDesign CS5 Script: erreur de conversion de taille d'image utilise trop de mémoire?
- 9. Javascript utilise beaucoup de mémoire
- 10. Nhibernate utilise beaucoup de mémoire
- 11. Python - Utiliser cPickle pour charger un pickle précédemment sauvegardé utilise trop de mémoire?
- 12. L'application C# WPF utilise trop de mémoire alors que GC.GetTotalMemory() est faible
- 13. Eclipse utilise trop de mémoire et quelle est la meilleure configuration?
- 14. SharedPreferences prenant trop de mémoire de tas
- 15. Projet Java EE, trop de mémoire?
- 16. Android Drawable.createFromStream alloué trop de mémoire
- 17. PHP en utilisant trop de mémoire
- 18. libxml alloue trop de mémoire sur l'iphone
- 19. Le tableau PHP prend trop de mémoire
- 20. PHP-FPM prenant trop de mémoire
- 21. Le service prend trop de mémoire
- 22. Quelle quantité de mémoire utilise une Hashtable?
- 23. Mon script bash utilise tellement de mémoire
- 24. Quelle quantité de mémoire utilise null pointeur?
- 25. iphone MFMailComposeViewController
- 26. Personnalisation MFMailComposeViewController
- 27. Version localisée de MFMailComposeViewController
- 28. Positionnement de l'affichage MFMailComposeViewController
- 29. MFMailComposeViewController customisez
- 30. crash MFMailComposeViewController