[#11] WP7Tips: tenere sotto controllo la memoria

Share on:

In alcuni casi le applicazioni WP7 iniziano ad occupare “troppa” memoria, per via di immagini troppo grandi, listbox non virtualizzate troppo grandi, video, audio, memory leak, etc…

Può essere comodo “tenere sott’occhio” la memoria (che non deve superare i 90Mb, pena la non certificazione sul Marketplace).

Si può fare in due modi. Il primo prevede di stampare i dati sull’occupazione della memoria direttamente nell’Output Window di Visual Studio, aggiungendo queste righe nell’App.xaml.cs :

public App()

{

… 

     #if (DEBUG)

          if (System.Diagnostics.Debugger.IsAttached)

          {

                     System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();

                     timer.Interval = TimeSpan.FromMilliseconds(1000d);

                     timer.Tick += new EventHandler(timer_Tick);

                     timer.Start();

}

      #endif

}

[Conditional("DEBUG")]

void timer_Tick(object sender, EventArgs e)

{

            long deviceTotalMemory = (long)Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceTotalMemory");

            long applicationCurrentMemoryUsage = (long)Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage");

            long applicationPeakMemoryUsage = (long)Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("ApplicationPeakMemoryUsage");

            System.Diagnostics.Debug.WriteLine(DateTime.Now.ToLongTimeString());

            System.Diagnostics.Debug.WriteLine("Device Total : " + deviceTotalMemory.ToString());

            System.Diagnostics.Debug.WriteLine("App Current : " + applicationCurrentMemoryUsage.ToString());

            System.Diagnostics.Debug.WriteLine("App Peak : " + applicationPeakMemoryUsage.ToString());

}

Il secondo modo li stampa a video come i counter del framerate presenti di default nei progetti.

Scegliete quello che preferite.

Post originale