Windows Workflow Foundation - Memory leak ?

cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 - 4 juil. 2011 à 02:48
cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 - 10 août 2011 à 11:08
Je vous propose un petit test :
- Créez un nouveau projet "Application console de workflow",
- Dans program.cs, rajoutez "while(true)" devant "WorkflowInvoker.Invoke(new Workflow1());", de sorte que votre workflow soit appelé de façon continuelle, à l'infini,
- Ne rajoutez rien au projet, lancez juste l’exécution de celui-ci, et regardez la mémoire monter dans le gestionnaire des tâches. Au bout de 15 secondes chez moi, j'ai déjà une OutOfMemoryException.

Et bien voila, s'il y a quelqu'un qui sait pourquoi, et surtout comment éviter cela, je suis carrément preneur (et oui, j'ai besoin d'appeler un de mes workflow un très grand nombre de fois, et je ne peux pas faire mon while DANS mon workflow ^^).
M'est avis que la méthode WorkflowInvoker.Invoke a une fuite mémoire, et que ce simple test la met très bien en avant.

2 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
9 juil. 2011 à 16:33
Bonjour,

Il s'agit visiblement ici d'une "fuite" d'assemblies générés dynamiquement provoqué par l'intéraction entre Visual Studio et le processus débuggué.
- Visual Studio liste un grand nombre de modules nommés "Workflow".
- La "fuite" s'arrête dès qu'on détache Visual Studio du processus.
- La "fuite" ne se produit pas quand l'application est démarrée hors debug.
- La "fuite" se produit dès que Visual Studio est attaché à une application démarrée hors debug.


/*
coq
CoqBlog
*/
0
cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 7
10 août 2011 à 11:08
Bonjour monsieur Coq :)

Merci pour ta réponse. J'ai posté un message sur un forum microsoft, et j'ai eu une réponse de leur part... Ils se voilent clairement les yeux sur ce problème. L'argument qu'ils m'avancent, c'est qu'il y a aussi une fuite de mémoire (même minime) si tu fais une boucle infinie avec rien dedans... mais bon, de là à faire un OutOfMemory, quand même pas. Par contre, dans le cas exposé ici, le OutOfMemory survient au bout de quelques secondes d'exécution...
Bref, selon Microsoft, tout va bien, il n'y a pas de problème...

Sinon, j'ai trouvé une solution de contournement : ne faire aucun appel à des activités par le code, toujours les faire par le biais d'une autre activité.

Dans mon cas précis, j'avais besoin d'un recalcul perpétuel, grosso modo dans une boucle infinie, et bien pour faire ça, j'ai été obligé de créer un workflow avec une boucle infinie dans le designer, celle-ci contenant l'appel à mon activité. Faire la même chose, mais par le code, à savoir un bête while(true) par le code (pour résumer, hein), contenant l'appel à l'activité, et bien ça plante au bout de 10 secondes grand max.

bref...
0
Rejoignez-nous