36 messaggi dal 01 giugno 2007
Ho un problema di aumento di memoria nell'applicazione che stò sviluppando, utilizzo silverlight4 e il toolkit free mvvmLight il quale implementa un metodo "CleaUp" al posto del comune Dispose.

All'apertura dell'applicazione mi trovo con la mia area di lavoro così divisa:
Menù, Frame, Pannello Accessori.
Considerando che la prima e l'ultima parte dell'area di lavoro sono statiche eccetto qualche piccola animazione, ho gestito il codice in modo tale che ogni volta che si carica una view nel frame, il sistema chiama il metodo base.CleanUp per quella che si stà lasciando.
Facendo così io mi aspetterei che la ram allocata su internet explorer abbia diciamo 100Mb fissi dell'area di lavoro e una quantita di memoria che viene svuotata e riempita a seconda del peso della view che viene caricata, ma aimè non è così infatti la memoria è sempre in aumento, e ovviamente non è una cosa accettabile, perchè dopo 5 minuti di navigazione si arriva facilmente ad avere 500 mb di memoria allocata per un'applicazione web :(

Aggiungo che tramite dei controlli che ho eseguito con WinDBG.exe, ho notato che ad un primo passaggio su una view ne risulta ovviamente una, ma se viene caricata una seconda view e poi si ritorna alla precedente Windbg ne segnala 2. e anche se non sono praticissimo di WinDbg mi sembra di capire che ciò che impediscono al garbageCollector di "riclare" la memoria, è il fatto che la view è ancora collegata al viewModel e viceversa.

Ovviamente non ho codice nel codebehind, e tutti i comandi nella view li associo tramite i RelayCommand.

Non metto altra carne sul fuoco ma se volete sapere altro non abbiate timore a chiedere, anche perchè se non risolvo questo piccolo problemino dovrò scrivere ottimizzato per i computer della nasa in piccolo sotto l'applicazione :)

Grazie mille per ogni eventuale aiuto.
il ViewModel ha dei riferimenti alla View?, hai provato ad utilizzare Silverlight spy?

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
36 messaggi dal 01 giugno 2007
nostromo ha scritto:
il ViewModel ha dei riferimenti alla View?, hai provato ad utilizzare Silverlight spy?


Cosa intendi per riferimenti alla view?
Cosa è silverlight spy?

Per la seconda ora mi informo e provo ad utilizzarlo,
Per la prima non sò bene come risponderti, ma nel viewmodel io creo le mie proprieta prendendo i dati e in seguito bindo nella view queste proprietà, e in più associo ai command nella view dei relayCommand nel view model, non sò se intendevi questo
36 messaggi dal 01 giugno 2007
Ri ciao

Ho fatto dei trace con winDbg e da quanto interpreto sembrerebbe che la view non può essere collezionata dal GC perchè legata alla viewmodel da un relayCommand, o almeno è quello che ho capito io leggendo il resoconto del debug che vi allego qui sotto

  
  
0:050> !dumpheap -stat -type anaUtenti  
total 0 objects  
Statistics:  
      MT    Count    TotalSize Class Name  
07c8b8f0        1           72 RETEBLU.CLIENT.ViewModel.anaUtentiViewModel  
07bbb3ec        2          312 RETEBLU.CLIENT.Views.anaUtentiAttiviView  
Total 3 objects  
  
  
0:050> !dumpheap -MT 07bbb3ec  
 Address       MT     Size  
084ed564 07bbb3ec      156       
08768644 07bbb3ec      156       
total 0 objects  
Statistics:  
      MT    Count    TotalSize Class Name  
07bbb3ec        2          312 RETEBLU.CLIENT.Views.anaUtentiAttiviView  
Total 2 objects  
  
0:050> !gcroot 084ed564  
Note: Roots found on stacks may be false positives. Run "!help gcroot" for  
more info.  
Scan Thread 8 OSTHread 4f48  
Scan Thread 42 OSTHread 49d0  
Scan Thread 43 OSTHread 24d8  
Scan Thread 44 OSTHread 4fd0  
Scan Thread 28 OSTHread 4090  
Scan Thread 45 OSTHread 4b38  
Scan Thread 48 OSTHread 4938  
DOMAIN(064813A8):HANDLE(Pinned):a3112f8:Root:  09064260(System.Object[])->  
  084db250(RETEBLU.CLIENT.ViewModel.anaUtentiViewModel)->  
  084db3d0(GalaSoft.MvvmLight.Command.RelayCommand`1[[System.String, mscorlib]])->  
  087e68b8(System.EventHandler)->  
  087e68a0(System.Object[])->  
  0857b75c(System.EventHandler)->  
  085176ec(System.Windows.Controls.Button)->  
  085175f0(System.Windows.Controls.Grid)->  
  0857adf0(System.Windows.Controls.ContentPresenter)->  
  0857ae64(System.Windows.Controls.Border)->  
  084f25c4(System.Windows.Controls.Theming.SystemColorsTheme)->  
  084eeb2c(System.Windows.Controls.Grid)->  
  084ed564(RETEBLU.CLIENT.Views.anaUtentiAttiviView)


Secondo voi è possibile, e che mi suggerite in caso?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.