8 votes

Fuite de mémoire sur Windows phone 8

Je développe une application native Windows 8. Mon application se plante après avoir fait des allers-retours dans l'application pendant un certain temps. Lors de l'analyse, en utilisant le profileur de mémoire, j'ai constaté qu'à chaque fois que je navigue d'une page à l'autre, l'utilisation de la mémoire augmente malgré le fait que je mette à zéro tous les objets de type liste, webclient, chaîne, etc. et que j'appelle GC.Collect après cela sur l'événement NavigatedFrom.

J'ai d'abord pensé que c'était dû aux images et j'ai donc supprimé les images de l'application et testé mais il n'y a toujours pas de changement dans l'utilisation de la mémoire de l'application. D'une certaine manière, le GC.Collect ne fonctionne pas et ne libère pas la mémoire.

J'ai essayé les choses mentionnées ci-dessous mais à ma grande malchance, cela ne fonctionne pas pour libérer la mémoire, le résultat reste le même.

  • J'ai donné la valeur null à l'image urisource avant de définir la nouvelle source, puis j'ai appelé gc.Collect pour libérer la mémoire utilisée, mais il semble qu'elle ne soit pas libérée.

  • Ensuite, j'ai mis tous les objets à null, et j'ai appelé GC.Collect() mais cela ne libère toujours pas l'espace de la mémoire utilisée par l'application du téléphone.

  • J'ai également essayé d'analyser en utilisant le profileur de mémoire mais je ne suis pas en mesure de suivre quoi que ce soit.

J'ai également parcouru tous les articles et implémenté les choses suggérées mais le GC.Collect() ne semble pas libérer la mémoire.

Comment puis-je libérer la mémoire consommée lors de la navigation d'une page à l'autre ?

3voto

Josue Yeray Points 1153

Il semble que quelque chose empêche les objets d'être recyclés par le ramasseur d'ordures dans un certain cycle. Cela pourrait être, et c'est normalement le cas, dû au fait que certains gestionnaires d'événements ne sont pas supprimés, maintenant ainsi l'objet en vie.

Si vous avez un événement dans la page ou le viewmodel, ou tout autre objet dans la page, supprimez-le (-=) dans la méthode onNavigatedFrom avant de quitter la page... Cela peut faire l'affaire et la mémoire de votre page est libre....

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