Windows Workflow Foundation - Memory leak ?

Signaler
Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
-
Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
-
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

Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
80
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
*/
Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
4
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...