SlideShare ist ein Scribd-Unternehmen logo
1 von 33
___________________________________________________




                                              Michele Capra
                                              Software Engineer @ OrangeCode
WP7 App

View and ViewModel


WP7 Class Library



TestSuite
public partial class MainPage : PhoneApplicationPage
{
    public MainPage()
    {
        InitializeComponent();
        Content = UnitTestSystem.CreateTestPage();
    }
}
[TestClass]
public class MainViewModelFixture
{
    private MainViewModel _viewModel;
    private Mock<IDbService> _service;

    public MainViewModelFixture()
    {
        _service= new Mock<IDbService>();
       _viewModel= new MainViewModel(_service.Object);
    }
    [TestMethod]
    public void Initialize_Should_LoadDataFromDb()
    {
        _viewModel.Initialize();
        _service.Verify(p=>p.LoadProducts());
    }
}
using Caliburn.Micro;
using OrangeCode.Wpreborn.SQLIteApp.Services;
namespace OrangeCode.Wpreborn.SQLIteApp.ViewModels
{
    public class MainViewModel :PropertyChangedBase
    {
        private readonly IDbService _service;

        public MainViewModel(IDbService service)
        {
            _service = service;
        }
        public void Initialize()
        {
            _service.LoadProducts();
        }
    }
}
[TestMethod]
        public void Initialize_Should_ShowData()
        {
            _service.Setup(p => p.LoadProducts()).Returns(
                    new List<Product>{
                                 new Product {Name = "Product 1", Serial =
"123456"}
                    }
           );

            _viewModel.Initialize();

            Assert.AreEqual(_viewModel.Products.Count,1);
            Assert.AreEqual(_viewModel.Products[0].Serial,"123456");
        }
public class MainViewModel :PropertyChangedBase
{
    private readonly IDbService _service;
    public IList<Product> Products { get; set; }

    public MainViewModel(IDbService service)
    {
        _service = service;
    }
    public void Initialize()
    {
        Products=_service.LoadProducts();
    }
}
public interface IDbServiceAsync{
    Task<IList<Product>> LoadProductsAsync();
}
public class DbServiceAsync :IDbServiceAsync{
    private readonly SQLiteAsyncConnection _context;
    public DbService(SQLiteAsyncConnection context)
    {
        _context = context;
    }
    public async Task<IList<Product>> LoadProductsAsync()
    {
        return await _context.Table<Product>().ToListAsync();
    }
}
private async void PrepareDb()
{
   SQLiteAsyncConnection connection = new SQLiteAsyncConnection("TestDb.sqlite”);
   await connection.DropTableAsync<Product>();
   await connection.CreateTableAsync<Product>();
   await connection.InsertAsync(new Product { Name = "Product 1", Serial = "123456" });
}
[TestMethod]
public async void LoadProductsAsync_Should_Load_Data_FromDb()
{
    await PrepareDb();
    var data= await _service.LoadProductsAsync();
    Assert.AreEqual(data.Count,1);
}
Email : michele@orangecode.it   Blog: www.orangecode.it/blog


Twitter: @piccoloaiutante       GitHub: github.com/piccoloaiutante

Weitere ähnliche Inhalte

Was ist angesagt?

Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby DeveloperVenturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Jon Kruger
 

Was ist angesagt? (20)

Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby DeveloperVenturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
 
Green dao
Green daoGreen dao
Green dao
 
Testable, Object-Oriented JavaScript
Testable, Object-Oriented JavaScriptTestable, Object-Oriented JavaScript
Testable, Object-Oriented JavaScript
 
GreenDao Introduction
GreenDao IntroductionGreenDao Introduction
GreenDao Introduction
 
Implementing CQRS and Event Sourcing with RavenDB
Implementing CQRS and Event Sourcing with RavenDBImplementing CQRS and Event Sourcing with RavenDB
Implementing CQRS and Event Sourcing with RavenDB
 
Hibernate
Hibernate Hibernate
Hibernate
 
JDBC - JPA - Spring Data
JDBC - JPA - Spring DataJDBC - JPA - Spring Data
JDBC - JPA - Spring Data
 
Ajax chap 3
Ajax chap 3Ajax chap 3
Ajax chap 3
 
Ajax chap 2.-part 1
Ajax chap 2.-part 1Ajax chap 2.-part 1
Ajax chap 2.-part 1
 
안드로이드 데이터 바인딩
안드로이드 데이터 바인딩안드로이드 데이터 바인딩
안드로이드 데이터 바인딩
 
Green dao
Green daoGreen dao
Green dao
 
SOLID PRINCIPLES
SOLID PRINCIPLESSOLID PRINCIPLES
SOLID PRINCIPLES
 
Anton Minashkin Dagger 2 light
Anton Minashkin Dagger 2 lightAnton Minashkin Dagger 2 light
Anton Minashkin Dagger 2 light
 
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
 
ERRest
ERRestERRest
ERRest
 
White Paper On ConCurrency For PCMS Application Architecture
White Paper On ConCurrency For PCMS Application ArchitectureWhite Paper On ConCurrency For PCMS Application Architecture
White Paper On ConCurrency For PCMS Application Architecture
 
Simple Jdbc With Spring 2.5
Simple Jdbc With Spring 2.5Simple Jdbc With Spring 2.5
Simple Jdbc With Spring 2.5
 
To Study The Tips Tricks Guidelines Related To Performance Tuning For N Hib...
To Study The Tips Tricks  Guidelines Related To Performance Tuning For  N Hib...To Study The Tips Tricks  Guidelines Related To Performance Tuning For  N Hib...
To Study The Tips Tricks Guidelines Related To Performance Tuning For N Hib...
 
JavaScript JQUERY AJAX
JavaScript JQUERY AJAXJavaScript JQUERY AJAX
JavaScript JQUERY AJAX
 
Servlets intro
Servlets introServlets intro
Servlets intro
 

Andere mochten auch (6)

Getting started with Windows Phone 7 and unit test
Getting started with Windows Phone 7 and unit testGetting started with Windows Phone 7 and unit test
Getting started with Windows Phone 7 and unit test
 
Biografia bryan mena 1 bachillerato b
Biografia bryan mena 1 bachillerato bBiografia bryan mena 1 bachillerato b
Biografia bryan mena 1 bachillerato b
 
Mobile application
Mobile applicationMobile application
Mobile application
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Mobile application
Mobile applicationMobile application
Mobile application
 
Biografia bryan mena 1 bachillerato b
Biografia bryan mena 1 bachillerato bBiografia bryan mena 1 bachillerato b
Biografia bryan mena 1 bachillerato b
 

Ähnlich wie Test and profile your Windows Phone 8 App

ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
habib_786
 

Ähnlich wie Test and profile your Windows Phone 8 App (20)

Présentation et bonnes pratiques du pattern MVVM - MIC Belgique
Présentation et bonnes pratiques du pattern MVVM - MIC BelgiquePrésentation et bonnes pratiques du pattern MVVM - MIC Belgique
Présentation et bonnes pratiques du pattern MVVM - MIC Belgique
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
Converting Your Mobile App to the Mobile Cloud
Converting Your Mobile App to the Mobile CloudConverting Your Mobile App to the Mobile Cloud
Converting Your Mobile App to the Mobile Cloud
 
Angular 2 Architecture (Bucharest 26/10/2016)
Angular 2 Architecture (Bucharest 26/10/2016)Angular 2 Architecture (Bucharest 26/10/2016)
Angular 2 Architecture (Bucharest 26/10/2016)
 
Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data Binding
 
Beautiful java script
Beautiful java scriptBeautiful java script
Beautiful java script
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
ASP .net MVC
ASP .net MVCASP .net MVC
ASP .net MVC
 
ZF2 for the ZF1 Developer
ZF2 for the ZF1 DeveloperZF2 for the ZF1 Developer
ZF2 for the ZF1 Developer
 
Introduction to Spring Boot.pdf
Introduction to Spring Boot.pdfIntroduction to Spring Boot.pdf
Introduction to Spring Boot.pdf
 
The secret unit testing tools no one has ever told you about
The secret unit testing tools no one has ever told you aboutThe secret unit testing tools no one has ever told you about
The secret unit testing tools no one has ever told you about
 
SOLID
SOLIDSOLID
SOLID
 
ASP.NET MVC Internals
ASP.NET MVC InternalsASP.NET MVC Internals
ASP.NET MVC Internals
 
Jsr 303
Jsr 303Jsr 303
Jsr 303
 
MVVM Lights
MVVM LightsMVVM Lights
MVVM Lights
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Solid angular
Solid angularSolid angular
Solid angular
 
Secret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you aboutSecret unit testing tools no one ever told you about
Secret unit testing tools no one ever told you about
 
Model View Presenter presentation
Model View Presenter presentationModel View Presenter presentation
Model View Presenter presentation
 

Mehr von Michele Capra (7)

Nodeschool italy at codemotion
Nodeschool italy at codemotionNodeschool italy at codemotion
Nodeschool italy at codemotion
 
Little bits & node.js IOT for beginner
Little bits & node.js IOT for beginnerLittle bits & node.js IOT for beginner
Little bits & node.js IOT for beginner
 
Testing Windows Phone 8.1 app with unit test and Coded UI test
Testing Windows Phone 8.1 app with unit test and Coded UI testTesting Windows Phone 8.1 app with unit test and Coded UI test
Testing Windows Phone 8.1 app with unit test and Coded UI test
 
Porting business apps to Windows Phone
Porting business apps to Windows PhonePorting business apps to Windows Phone
Porting business apps to Windows Phone
 
The magic of Dynamic in Nancy Fx
The magic of Dynamic in Nancy FxThe magic of Dynamic in Nancy Fx
The magic of Dynamic in Nancy Fx
 
Windows Phone 7 Development
Windows Phone 7 DevelopmentWindows Phone 7 Development
Windows Phone 7 Development
 
My Final Dissertation
My Final DissertationMy Final Dissertation
My Final Dissertation
 

Kürzlich hochgeladen

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Kürzlich hochgeladen (20)

Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 

Test and profile your Windows Phone 8 App

  • 1. ___________________________________________________ Michele Capra Software Engineer @ OrangeCode
  • 2.
  • 3.
  • 4.
  • 5.
  • 6. WP7 App View and ViewModel WP7 Class Library TestSuite
  • 7.
  • 8.
  • 9.
  • 10. public partial class MainPage : PhoneApplicationPage { public MainPage() { InitializeComponent(); Content = UnitTestSystem.CreateTestPage(); } }
  • 11.
  • 12.
  • 13.
  • 14. [TestClass] public class MainViewModelFixture { private MainViewModel _viewModel; private Mock<IDbService> _service; public MainViewModelFixture() { _service= new Mock<IDbService>(); _viewModel= new MainViewModel(_service.Object); } [TestMethod] public void Initialize_Should_LoadDataFromDb() { _viewModel.Initialize(); _service.Verify(p=>p.LoadProducts()); } }
  • 15.
  • 16. using Caliburn.Micro; using OrangeCode.Wpreborn.SQLIteApp.Services; namespace OrangeCode.Wpreborn.SQLIteApp.ViewModels { public class MainViewModel :PropertyChangedBase { private readonly IDbService _service; public MainViewModel(IDbService service) { _service = service; } public void Initialize() { _service.LoadProducts(); } } }
  • 17.
  • 18. [TestMethod] public void Initialize_Should_ShowData() { _service.Setup(p => p.LoadProducts()).Returns( new List<Product>{ new Product {Name = "Product 1", Serial = "123456"} } ); _viewModel.Initialize(); Assert.AreEqual(_viewModel.Products.Count,1); Assert.AreEqual(_viewModel.Products[0].Serial,"123456"); }
  • 19. public class MainViewModel :PropertyChangedBase { private readonly IDbService _service; public IList<Product> Products { get; set; } public MainViewModel(IDbService service) { _service = service; } public void Initialize() { Products=_service.LoadProducts(); } }
  • 20.
  • 21. public interface IDbServiceAsync{ Task<IList<Product>> LoadProductsAsync(); } public class DbServiceAsync :IDbServiceAsync{ private readonly SQLiteAsyncConnection _context; public DbService(SQLiteAsyncConnection context) { _context = context; } public async Task<IList<Product>> LoadProductsAsync() { return await _context.Table<Product>().ToListAsync(); } }
  • 22. private async void PrepareDb() { SQLiteAsyncConnection connection = new SQLiteAsyncConnection("TestDb.sqlite”); await connection.DropTableAsync<Product>(); await connection.CreateTableAsync<Product>(); await connection.InsertAsync(new Product { Name = "Product 1", Serial = "123456" }); } [TestMethod] public async void LoadProductsAsync_Should_Load_Data_FromDb() { await PrepareDb(); var data= await _service.LoadProductsAsync(); Assert.AreEqual(data.Count,1); }
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33. Email : michele@orangecode.it Blog: www.orangecode.it/blog Twitter: @piccoloaiutante GitHub: github.com/piccoloaiutante

Hinweis der Redaktion

  1. Dove eravamo con Windows Phone 7:- MS Test o nunit per il testing del codice- e per il mocking Moq 3.1 per silverlight
  2. Per eseguire le nostre suite di test avevamo a disposizionesvariati test runnerQui facciovederequello di resharper
  3. La strutturaclassicadella nostra soluzione era composta da:Applicazionecon View,VewiModel- Class library chereferenziavailprogettocontenente le test suite
  4. Eccocinelnuovomondo:grossicambiamenti, dal punto di vista del testinggestioneda parte dei test runner delle keyword async/awaitnecessitàdi eseguireilcodicenell&apos;emulatore o sul device
  5. Per risolverequestiprobelmivienerilasciato con il toolkit un test framework che due peculiaritàcheallostadioattuale e la via principe per potereseguire test su windows phone.- necessita del toolkit
  6. Con questostrumentocambianoperòanche le nostreabitudini di test:- la prima èche le nostre suite di test non sarannoospitate in una class library ma bensi in unavera a propriaappilcazione- purtroppoillanciodei test non saràpiùautomatico ma vedremoche ci sonodeibottoni- ma gestionaancheilcodiceasincrono
  7. refenziavia nuget la dll- nellamainpagedell&apos;applicazionedobbiamosettareil content con il content fornitodalladll in modo tale chesia poi lei a gestirel&apos;interfaccia
  8. Eccocome appareil test tools:Tags chepermetteevenutalmente di eseguiredelle suite di test specifiche e non di eseguiretuttii test di unaclasseun bottone play per lanciarei teste ilrisultatodei test dove ci sonoicontatoridei test e irisultati per suite
  9. Applicazionedi demo:- applicazione con un db e un viewmodelchedeve fare visualizzare la listadeiprodotti.- usatoildbengine di sqlite per fare unaversionepiùaggiornata- pattern MVVM per questaapplicazione per potertestaretuttoilcodice.
  10. Strutturadellesoluzione, come possiamovedere 2 vere e proprieapplicazioni per wp8 piùlinkatoil wrapper per usaresqlite- prima app vm e service e sqlite- utilizzo di caliburn.micro per vm framework- seconda app chereferenzia la prima con le relative fixture e referenziatoil toolkit test
  11. Facciamoil primo test: - moccarevuol dire creare un oggettofittiziocheimplemental&apos;interfaccia e tienecontodellechiamatechevengonoeffetuatedaimetodi- interfacciaidbservicechereperisceidati- viewmodel con metodo initialize chedeveeffettuare la chiamata la serivzio.- usiamomoq per moccarel&apos;interfaccia.
  12. Scriviamoilcodice per afrepassareil test:- nell&apos;initializecarichiamo la listadeidati- ilviewmodelderiva da propertyChangedbase per eriditarel&apos;impelemntazionie di caliburndellainotifypropertychanged.
  13. Green
  14. Secondo test:-vogliocheilvmmostriidatisulla vista e quindi mi aspettoche ci siaunalista products chedopoaverechiamatol&apos;initializemostriidati.- mocco la chiamata al servizio e mi aspettoche mi ritorniunalista di prodotti con un prodotto- verificoanchechel&apos;oggettoabbia le proprietàgiuste.
  15. Implementonelvm e facciogirarei test
  16. Green
  17. Implementonelservizio la chiamata a sqlite e verificochepassiil test:- mi faccioritornaretuttii record dellatabella Product da sqlite
  18. finoa qui codicesincrono, che in realtà in wp8 non girerebbeperchèl&apos;i/o e ildbvannogestiti in modoasincronoscriviamo la primitiva del serviziocheabbiamovisto prima in modoasincrono e facciamo un test di integrazione.prepare inserisceidatineldbNel test verifico la presenzadeidatiusandoasync await
  19. ----- Meeting Notes (1/27/13 16:57) -----ed ecco il risultato
  20. Io lo utilizzereisopratutto se uno ha giàscrittodelle suite di test per un&apos;app wp7 e vuoletenerle per l&apos;aggiornamento a wp8utile per fare dei test di integrazione e di regressione per vedere se spaccoqualcosamentresviluppo, ma non per fare unit test
  21. Come profilareun&apos;app? Tool in Visual Studio per profilare e monitorare.- monitoring : focus sulla user experience quindiresponsività e tempi di avvio- profiling: per veder le risorseusate come memoria e cpu.
  22. Potetetrovarlo sotto il menu di debug o con Alt +F1e presenta le due possibilitàchedicevamo prima:monitoring o profiling
  23. Applicazionedi esempiochecaricavolutamenteomoltegrosseimmagini in un controllo panorama.
  24. Facciamopartirel&apos;applicazioneediniziamo ad usarla. Quandoabbiamofinitoclicchiamosu End Session..
  25. E ci apparequesto report e possiamovedereche la responsività come potevamofacilmenteimmaginare ci vienedettoche non è molto buona. Vengofornitealtreinformazioni come - la memoriausata- la bandautilizzata- e il tempo di partenza
  26. - U sono le input gesture- prima banda frame rate dell&apos;applicazione- utilizzodellacpu- reposonsivitàdell&apos;app- utilizzodellabatteria- utilizzomemoria- notare la cpu a canna-&gt;frame rate basso, repsonsivitàbassa
  27. Giusto due consigliche mi permetto di darvi, ma solo perchè ci sonocascato:- per iviewmodel: implementarel&apos;idisposable e fare il dispose di tuttiglioggetticheavetenelvm e sganciarvi da tuttiglieventi a cui vi sietesottoscritti- per le visteusateil virtualizing stack panel per caricare solo glioggettiche vi servono, da valutarecaso per caso, perchè poi potresteavere un caricamento a scattidelleimmagini (spece se giàscaricate).
  28. Cosaabbiamovistooggi