2010-11-01 4 views
5

Lorsque j'exécute mon application ciblée sur .Net 3.5, elle présente des fuites massives de mémoire. 50mb chaque fois que j'assigne un UserControl à une référence locale. Je crée uniquement une instance de chaque UserControl. Si je compile et exécute le même code ciblé sur .Net 4.0, tout tourne bien autour de la marque de 50mb.Comment éviter les fuites massives de mémoire sur WPF sur .Net 3.5?

Est-ce une version connue avec 3.5? C'est à dire. ce n'est pas utilisable en prod?

/Mes clients ont seulement 3,5 et ne déménageront à 4,0 pendant un certain temps, donc je n'ai pas l'option facile

+0

Désolé s'il vous plaît expliquer? Le code est bon sur. Net 4.0 – DayTwo

+1

Et qu'est-ce que vous utilisez pour déterminer l'utilisation de la mémoire? Si c'est le Gestionnaire des tâches, vous devez savoir qu'il est très imprécis d'utiliser pour cela. –

Répondre

8

fuite de mémoire des correctifs logiciels pour WPF 3.5 SP1
http://www.infoq.com/news/2010/06/WPF-Memory-Leaks

En particulier, un coup d'oeil à ces deux correctifs qui ont été corrigés dans .NET 4.0, mais sont disponibles en tant que correctifs pour les utilisateurs de .NET 3.5:

http://support.microsoft.com/kb/967634

http://support.microsoft.com/kb/967328

+0

Beau lien. Cependant, ils semblent surtout se référer à la pression de la mémoire à court terme avec WeakReferences. –

+0

Merde vous crapy WPF! Merci qui semble avoir résolu le problème. Mais je ne peux pas demander à tous mes clients d'appliquer ces correctifs. Y a-t-il des solutions de contournement? – DayTwo

+0

@DayTwo: J'en doute; les correctifs doivent être déployés. Si vous avez une fonction de mise à jour automatique pour votre logiciel, vous pouvez l'incorporer à cela. –

4

Qu'est-ce que vous fait penser qu'il est une fuite, et pas seulement la mémoire qui n'a pas été garbage recueilli encore? Y a-t-il un impact en dehors d'un numéro dans un profileur qui vous concerne? Si non, pourquoi s'inquiéter. Préféreriez-vous que votre programme utilise la mémoire disponible ou préférez-vous que les cycles CPU récupèrent les objets inutilisés?

+1

Parce qu'après de nombreuses interactions gui, il déclenche une exception OutOfMemory. GC ne récupère jamais d'où la fuite. – DayTwo

+0

Je voudrais voir le code qui fait ça. Il est beaucoup plus probable qu'il y ait un bug dans le code que dans le Framework ... et que 4.0 gère mieux ce bug. –

Questions connexes