Bonsoir, depuis qu'on a attaqué notre nouvelle appli Wpf avec MVVM, j'ouvre mes vues de la manière suivante :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MonViewModel mvm = new MonViewModel(...); mvm.ShowDialog();
Dans ma vue principale, j'ai plusieurs endroits où j'ouvre d'autres viewModel (à partir de diverses ICommand) :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 MonSousViewModel1 msvm1 = new MonSousViewModel1(...); mvm1.ShowDialog(); MonSousViewModel2 msvm1 = new MonSousViewModel2(...); mvm2.ShowDialog(); ...
Je savais dès le début qu'en fermant la vue (view.Close ou view.DialogResult = ...), son viewModel restait instancié et qu'on avait donc un peu de pseudo de perte mémoire.
Maintenant, je souhaite faire rentrer ça dans l'ordre, car si j'ouvre puis ferme 10 fois une sous vue, l'appli fait 10 fois 2Mo de plus dans la ram et j'ai autant de SousViewModel qui restent instanciés pour rien.
Donc, j'me suis dis, oki, on va juste mettre des références dans ma vue principale sur chaque sousViewModel et de les construire que pour leur première utilisation mais :
1 : ça fait carrément augmenter la mémoire utilisée par le processus.
2 : quand je fait un showDialog une seconde fois, ça explose en me disant grosso modo qu'il y a plus de xaml rattaché :
"
Impossible de définir Visibility ou d'appeler Show, ShowDialog ou WindowInteropHelper.EnsureHandle après la fermeture d'un objet Window.
"
Un petit conseil pour les bonnes pratiques à adopter serait le bien venu.
Merci d'avance.
Partager