2015-11-30 16 views
6

Sto costruendo un'app per Windows universale (UWP) utilizzando il modello Visual C# "App in bianco" in Visual Studio. Voglio misurare due punti dati quando eseguo la mia app:Come misurare le prestazioni XAML/UI nell'app per Windows universale?

  • Quanto tempo occorre affinché l'interfaccia utente venga completamente aggiornata dopo la creazione/modifica di un elemento XAML?
  • Quanto tempo impiega il programma per elaborare internamente gli elementi XAML, indipendentemente dal fatto che le modifiche si riflettano o meno nell'interfaccia utente?

Per il primo punto, diciamo che sto creando un app che ha 5 ToggleSwitches definite come XAML in MainPage.xaml. Voglio misurare il tempo necessario all'interfaccia utente per mostrare tutti i 5 ToggleSwitch. Ho inserito un timer di cronometro proprio prima del comando this.InitializeComponent() in MainPage.xaml.cs (poiché presumo che questo sia il punto in cui inizia l'elaborazione degli elementi di Designer XAML). Voglio interrompere il timer non appena la finestra è stata dipinta correttamente. Ho sperimentato gli eventi Loaded e LayoutUpdated per un elemento XAML, ma nessuno dei due viene attivato mentre l'interfaccia utente viene aggiornata. Dove posiziono il mio timer per ottenere i dati che cerco? Se passo il codice nel debugger, a quale riga di codice si "Passa" l'aggiornamento dell'interfaccia utente?

Per il secondo punto, voglio solo registrare quanto tempo il computer richiede di elaborare internamente il codice XAML (che non includono il rendering l'interfaccia utente, che esegue il motore di composizione, l'elaborazione con Direct3D - solo l'elaborazione del XAML). Il mio primo istinto era semplicemente avviare il cronometro prima di questo.InitializeComponent() e terminare subito dopo. Tuttavia, non vedo un cambiamento nei dati in base al contenuto della pagina. Ad esempio, se eseguo la mia app con 100 ToggleSwitches o 5 ToggleSwitches definiti in XAML Designer, il metodo this.InitializeComponent() richiede lo stesso tempo. Qualche idea su come posso misurare meglio questo punto dati?

Qualsiasi aiuto è molto apprezzato.

+0

Questo può aiutare: https://msdn.microsoft.com/en-us/library/aa969767(v=vs.110) .aspx Non sono sicuro di come MS esegua l'analisi delle prestazioni, ma suppongo che utilizzi hook di basso livello. C'è un sacco di WPF che viene scaricato su cose come la GPU che rendono difficile misurare con un cronometro e gli eventi. –

risposta

3

Lo strumento Timeline applicazione potrebbe probabilmente aiutarti (disponibile con Visual Studio 2015).

Timeline

Analizzare UI reattività con lo strumento Timeline Application https://msdn.microsoft.com/en-us/library/dn957934.aspx

+0

Ottimo strumento, grazie per la risposta. Per la domanda che ho chiesto, questo è davvero carino. Solo per aggiungere alcune informazioni - sembra che la Timeline dell'applicazione non funzioni per alcune macchine remote, il che accade nel mio caso! –

Problemi correlati