Question Fuites de mémoire WPF DropShadowEffect et Flou


J'écris une application, qui est essentiellement un tas d'écrans xaml en vrac - pas de codebehind, juste lié dynamiquement à un ViewModel à l'exécution.

Lors de l'exécution d'un week-end sur un PC plus ancien, un crash s'est produit. Le traçage et la recréation ont montré qu'il y avait une fuite de mémoire dans igdumd32.dll (un dll de pilote graphique Intel). Après quelques recherches, j'ai écrit 2 applications autonomes simples avec une animation très simple dans l'écran central. 1 sans effet et 1 avec un effet dropshadow sur l'animation - pas d'autres changements, littéralement un changement de 1 ligne à la première application (xaml est assez verbeux, sinon je le posterais ici). Je les ai exécutés via l'outil de profilage de la mémoire de redgate pendant 40 minutes. Le 1er était bien: enter image description here mais le 2ème avait une fuite de mémoire notable sur igdumd32.dll et la mémoire allouée par le code managé:enter image description here 

Une autre chose que j'ai remarquée, c'est que cela ne se produit pas sur un nouveau PC. En regardant les versions de igdumd32.dll - le PC plus ancien a une version 2009 (8.15.10.1930) alors que le plus récent (fonctionnant) a la version 2012 (8.15.10.2639).

Quelqu'un d'autre a-t-il vécu cela? Mes pensées sont d'utiliser uniquement des effets spéciaux dans xaml lorsque les chipsets / drivers peuvent gérer cela, mais je ne trouve rien sur le web ou sur MSDN qui me dit des limitations matérielles ou de pilotes pour ces effets (au-delà nécessaire pour eux ou mon processeur va sauter).


10
2017-12-09 11:46


origine


Réponses:


Vos effets DropShadow et Blur dans les premières itérations de WPF ont été implémentés dans le logiciel (dans WPF lui-même, c’est-à-dire) et n’auraient probablement pas ce problème de fuite de mémoire. Plus tard (4.0 et versions ultérieures) ont légèrement modifié la syntaxe et ajouté la possibilité de décharger ces effets sur le matériel graphique. Bien que cela améliore la vitesse d'exécution, il devient également dépendant du pilote graphique pour éviter toute fuite de mémoire. Vous pouvez modifier votre code pour les implémenter dans WPF lui-même ou, comme vous l'avez déjà fait, fournir une apparence codée au pilote graphique.


1
2018-04-13 06:12