Aracılığıyla paylaş


Performans planlaması

Kullanıcılar uygulamalarının yanıt vermeye devam etmesini, doğal hissetmesini ve pillerini tüketmemesini bekler. Teknik olarak, performans işlevsel olmayan bir gereksinimdir, ancak performansı bir özellik olarak ele alma, kullanıcılarınızın beklentilerini sunmanıza yardımcı olur. Hedeflerin belirtilmesi ve ölçülmesi önemli faktörlerdir. Performans açısından kritik senaryolarınızın ne olduğunu belirleme; iyi performansın ne anlama gelir tanımlaması. Ardından projenizin yaşam döngüsü boyunca hedeflerinize ulaşmanızı sağlamak için yeterince erken ve sık ölçüm yapın.

Hedefleri belirtme

Kullanıcı deneyimi, iyi performans tanımlamanın temel bir yoludur. Bir uygulamanın başlangıç süresi, kullanıcının performansıyla ilgili algısını etkileyebilir. Bir kullanıcı, bir saniyeden kısa bir uygulama başlatma süresini mükemmel, 5 saniyeden az iyi ve 5 saniyeden uzun bir sürenin kötü olduğunu düşünebilir.

Diğer ölçümlerin kullanıcı deneyimi üzerinde daha az belirgin bir etkisi vardır, örneğin bellek. Bir uygulamanın askıya alınmış veya etkin olmayan durumdayken sonlandırılma olasılığı, etkin uygulama tarafından kullanılan bellek miktarıyla artar. Yüksek bellek kullanımının sistemdeki tüm uygulamalar için deneyimi düşürdüğünü, bu nedenle bellek tüketimine yönelik bir hedefin makul olduğunu belirten genel bir kuraldır. Uygulamanızın kullanıcılar tarafından algılanan kaba boyutunu dikkate alın: küçük, orta veya büyük. Performansla ilgili beklentiler bu algıyla bağıntılı olacaktır. Örneğin, 100 MB'tan az bellek kullanmak için çok fazla medya kullanmayan küçük bir uygulama isteyebilirsiniz.

İlk hedefi belirlemek ve daha sonra yeniden düzenlemek, hiç bir hedefe sahip olmamasından daha iyidir. Uygulamanızın performans hedefleri belirli ve ölçülebilir olmalıdır ve üç kategoriye girmelidir: kullanıcıların veya uygulamanın görevleri (süre) tamamlaması ne kadar sürer? kullanıcının etkileşimine (akıcılık) yanıt olarak uygulamanın kendisini yeniden çizdiği hız ve süreklilik; ve uygulamanın pil gücü (verimlilik) dahil olmak üzere sistem kaynaklarını ne kadar iyi koruyup korumaz.

Zaman

Kullanıcıların uygulamanızdaki görevlerini tamamlaması için geçen kabul edilebilir zaman aralıklarını (etkileşim sınıfları) düşünün. Her etkileşim sınıfı için bir etiket, algılanan bir kullanıcı yaklaşımı ve ideal ve maksimum süreler atayın. Bazı öneriler aşağıdadır.

Etkileşim sınıfı etiketi Kullanıcı algısı Ideal Maksimum Örnekler
Hızlı En az fark edilebilir gecikme 100 milisaniye 200 milisaniye Uygulama çubuğunu açın; düğmeye basma (ilk yanıt)
Tipik Hızlı, ancak hızlı değil 300 milisaniye 500 milisaniye Yeniden boyutlandırma; anlamsal yakınlaştırma
Duyarlı Hızlı değil, ama duyarlı hissediyor. 500 milisaniye 1 saniye Farklı bir sayfaya gidin; uygulamayı askıya alınmış durumdan devam ettirin.
Başlat Rekabet ortamında deneyim 1 saniye 3 saniye Uygulamayı ilk kez veya daha önce sonlandırıldıktan sonra başlatın
Devamlı Artık duyarlı hissetmiyor 500 milisaniye 5 saniye İnternet'ten dosya indirme
Tutsak Uzun süre; kullanıcı başka yere geçiş yapabilir 500 milisaniye 10 saniye Mağaza'dan birden çok uygulama yükleme

 

Artık uygulamanızın performans senaryolarına etkileşim sınıfları atayabilirsiniz. Uygulamanın zaman dilimi referansını, kullanıcı deneyiminin bir bölümünü ve her senaryoya bir etkileşim türü atayabilirsiniz. Örnek bir yemek ve yemek uygulaması için bazı öneriler aşağıda verilmiştir.

SenaryoZaman noktasıKullanıcı deneyimiEtkileşim sınıfı
Yemek tarifi sayfasına gidin İlk yanıtSayfa geçişi animasyonu başlatıldıHızlı (100-200 milisaniye)
Duyarlıİçerik listesi yüklendi; görüntü yokDuyarlı (500 milisaniye - 1 saniye)
Görünür tamamlandıTüm içerik yüklendi; resimler görüntülendiSürekli (500 milisaniye - 5 saniye)
Yemek tarifi aramaİlk yanıtArama düğmesine tıklandıHızlı (100 - 200 milisaniye)
Görünür tamamlandıGösterilen yerel yemek tarifi başlıklarının listesiTipik (300 - 500 milisaniye)

Canlı içerik görüntülüyorsanız içerik yenileme hedeflerini de göz önünde bulundurun. Amaç, içeriği birkaç saniyede bir yenilemek mi? Veya içeriği birkaç dakikada bir, birkaç saatte bir veya günde bir kez yenilemek kabul edilebilir bir kullanıcı deneyimi mi?

Hedefleriniz belirtildiğinde artık uygulamanızı daha iyi test edebiliyor, çözümleyebiliyor ve iyileştirebiliyorsunuz.

Akışkan

Uygulamanız için belirli ölçülebilir akıcılık hedefleri şunlar olabilir:

  • Ekran yeniden çizim duraklamaları ve başlatmaları yok (aksaklık).
  • Animasyonlar saniyede 60 kare (FPS) ile işlenir.
  • Kullanıcı kaydırır/sürüklerken, uygulama saniyede 3-6 sayfa içerik sunar.

Verimlilik

Uygulamanız için belirli ölçülebilir verimlilik hedefleri şunlar olabilir:

  • Uygulamanızın işlemi için CPU yüzdesi N veya altındadır ve MB cinsinden bellek kullanımı her zaman M veya M'nin altındadır.
  • Uygulama etkin olmadığında, uygulamanızın işlemi için N ve M sıfırdır.
  • Uygulamanız pil gücüyle X saat boyunca etkin bir şekilde kullanılabilir; uygulamanız etkin olmadığında cihaz Y saat boyunca şarjını korur.

Uygulamanızı performans için tasarlama

Artık uygulamanızın tasarımını etkilemek için performans hedeflerinizi kullanabilirsiniz. Örnek yemek ve yemek uygulamasını kullanarak, kullanıcı yemek tarifi sayfasına gittikten sonra, önce tarifin adının işlenmesi, bileşenlerin görüntülenmesinin ertelenmesi ve görüntülerin görüntülenmesinin daha fazla ertelenmesi için öğeleri artımlı olarak güncelleştirmeyi seçebilir siniz. Bu, kaydırma/kaydırma sırasında yanıt verme hızını ve akıcı bir kullanıcı arabirimini korur ve etkileşim kullanıcı arabirimi iş parçacığının yakalamasını sağlayan bir hıza kadar yavaşladıktan sonra tam uygunluk işlemesi gerçekleşir. Dikkate alınması gereken diğer bazı yönler aşağıdadır.

kullanıcı arabirimi

  • XAML işaretlemenizi iyileştirerek uygulamanızın kullanıcı arabirimindeki her sayfa (özellikle ilk sayfa) için ayrıştırma ve yükleme süresini ve bellek verimliliğini en üst düzeye çıkarın. Özetle, gerekli olana kadar kullanıcı arabirimini ve kodu yüklemeyi erteleyebilirsiniz.
  • ListView ve GridView için tüm öğeleri aynı boyutta yapın ve olabildiğince çok ListView ve GridView iyileştirme tekniği kullanın.
  • Çerçevenin, kodda emredici bir şekilde oluşturmak yerine, parçalar halinde yükleyip yeniden kullanabileceği işaretleme dili biçiminde kullanıcı arabirimini bildirin.
  • Kullanıcı ihtiyaç duyana kadar kullanıcı arabirimi öğelerinin oluşturulmasını geciktirin. Bkz. x:Load özniteliği.
  • Tema geçişleri ve animasyonları, storyboard animasyonlarına tercih edin. Daha fazla bilgi için bkz. Animasyonlara genel bakış. Görsel taslak animasyonların ekranda sürekli güncelleştirmeler gerektirdiğini ve CPU ve grafik işlem hattını etkin tuttuğunu unutmayın. Pilin korunması için kullanıcı uygulamayla etkileşim kurmuyorsa çalışan animasyonlar yoktur.
  • Yüklediğiniz görüntüler , GetThumbnailAsync yöntemi kullanılarak sunduğunuz görünüme uygun boyutta yüklenmelidir.

CPU, bellek ve güç

  • Daha düşük öncelikli işleri, düşük öncelikli iş parçacıkları ve/veya çekirdeklerde yürütülmesi için zamanlayın. Bkz. Asenkron programlama, Dispatcher özelliği ve CoreDispatcher sınıfı.
  • Askıya alınan pahalı kaynakları (medya gibi) serbest bırakarak uygulamanızın bellek ayak izini en aza indirin.
  • Kodunuzun çalışma kümesini en aza indirin.
  • Olay işleyicilerinin kaydını kaldırarak ve mümkün olduğunda kullanıcı arabirimi öğelerinin başvurularını kaldırarak bellek sızıntılarını önle.
  • Pilin iyiliği için verileri ne sıklıkta yokladığınız, algılayıcıyı sorguladığınız veya boşta olduğunda CPU üzerinde çalışma zamanladığınız konusunda muhafazakar olun.

Veri erişimi

  • Mümkünse içeriği önceden yükleyin. Otomatik ön oluşturma için bkz. ContentPrefetcher sınıfı. El ile ön yükleme için Windows.ApplicationModel.Background ad alanına ve MaintenanceTrigger sınıfına bakın.
  • Mümkünse, erişmesi pahalı olan içeriği önbelleğe alın. Bkz. LocalFolder ve LocalSettings özellikleri.
  • Önbellek eksikleri için, uygulamanın içerik yüklemeye devam ettiğini gösteren bir yer tutucu kullanıcı arabirimini mümkün olan en kısa sürede gösterin. Yer tutucudan canlı içeriğe kullanıcıya engel olmayacak şekilde geçiş. Örneğin, uygulama canlı içerik yükledikçe kullanıcının parmağı veya fare işaretçisinin altındaki içeriğin konumunu değiştirmeyin.

Uygulama başlatma ve devam ettirme

Uyarlamalı kullanıcı arabirimi ve yönlendirme

  • VisualStateManager sınıfını kullanın.
  • Yalnızca gerekli çalışmayı hemen tamamlayın; yoğun uygulama çalışmasını daha sonraya erteleyin; kullanıcı uygulamanızın kullanıcı arabirimini kırpılmış durumda görmeden önce uygulamanızın çalışmayı tamamlaması için 200 ile 800 milisaniye arasında bir süre vardır.

Performansla ilgili tasarımlarınız sayesinde uygulamanızı kodlamaya başlayabilirsiniz.

Performans için araç

Kodlarken, uygulamanız çalışırken belirli noktalarda iletileri ve olayları kayıt tutan kod ekleyin. Daha sonra uygulamanızı test ederken, uygulamanızın performansıyla ilgili bir rapor oluşturmak ve görüntülemek için Windows Performans Kaydedicisi ve Windows Performans Çözümleyicisi (her ikisi de Windows Performans Araç Seti'ne dahil edilir) gibi profil oluşturma araçlarını kullanabilirsiniz. Bu raporda, raporun sonuçlarını daha kolay çözümlemenize yardımcı olmak için bu iletileri ve olayları arayabilirsiniz.

Evrensel Windows Platformu (UWP), Windows için Olay İzleme (ETW)tarafından yedeklenen ve zengin bir olay günlüğü ve izleme çözümü sunan günlük API'leri sağlar. Windows.Foundation.Diagnostics ad alanının parçası olan API'ler FileLoggingSession, LoggingActivity, LoggingChannel ve LoggingSession sınıflarını içerir.

Uygulama çalışırken raporda belirli bir noktada bir mesajı günlüğe kaydetmek için bir LoggingChannel nesnesi oluşturun ve ardından nesnenin LogMessage yöntemini çağırın.

// using Windows.Foundation.Diagnostics;
// ...

LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");

myLoggingChannel.LogMessage(LoggingLevel.Information, "Here' s my logged message.");

// ...

Uygulama çalışırken rapordaki başlatma ve durdurma olaylarını belli bir zaman dilimi boyunca günlüğe kaydetmek için bir LoggingActivity nesnesi oluşturun ve ardından nesnenin LoggingActivity oluşturucusunu çağırın.

// using Windows.Foundation.Diagnostics;
// ...

LoggingActivity myLoggingActivity;

// myLoggingChannel is defined and initialized in the previous code example.
using (myLoggingActivity = new LoggingActivity("MyLoggingActivity"), myLoggingChannel))
{   // After this logging activity starts, a start event is logged.
    
    // Add code here to do something of interest.
    
}   // After this logging activity ends, an end event is logged.

// ...

Ayrıca Loglama örneğinebakın.

Uygulamanız araçlı olarak uygulamanızın performansını test edebilir ve ölçebilirsiniz.

Performans hedeflerine göre test etme ve ölçme

Performans planınızın bir parçası, geliştirme sırasında performansı ölçeceğiniz noktaları tanımlamaktır. Bu, prototip oluşturma, geliştirme veya dağıtım sırasında ölçüm yapıp yapmadığınız bağlı olarak farklı amaçlara hizmet eder. Prototip oluşturmanın ilk aşamalarında performansın ölçülmesi son derece değerli olabilir, bu nedenle anlamlı işlere sahip bir kodunuz olduğu anda bunu yapmanızı öneririz. Erken ölçümler, önemli maliyetlerin uygulamanızda nerede olduğuna ilişkin iyi bir fikir verir ve tasarım kararlarını bilgilendirin. Bu, yüksek performanslı ve ölçeklendirme uygulamalarına neden olur. Tasarımları eskisinden sonra değiştirmek genellikle daha maliyetlidir. Ürün döngüsünün sonlarında performansın ölçülmesi son dakika korsanlıklarına ve düşük performansa neden olabilir.

Uygulamanızın orijinal performans hedeflerinize göre nasıl karşılaştırıldığını test etmek için bu teknikleri ve araçları kullanın.

  • Hepsi bir arada ve masaüstü bilgisayarlar, dizüstü bilgisayarlar, ultrabook'lar ve tabletler ve diğer mobil cihazlar dahil olmak üzere çok çeşitli donanım yapılandırmalarına karşı test edin.
  • Çok çeşitli ekran boyutlarına karşı test edin. Daha geniş ekran boyutları çok daha fazla içerik gösterse de, bu ek içeriğin tümünün getirilmesi performansı olumsuz etkileyebilir.
  • Olabildiğince çok test değişkenini ortadan kaldırın.
    • Test cihazında arka plan uygulamalarını kapatın. Bunu yapmak için Windows'ta Başlat menüsünden Ayarlar seçin >, Kişiselleştirme>Kilit ekranı. Etkin olan her uygulamayı seçin ve Hiçbiriseçin.
    • Uygulamanızı test cihazına dağıtmadan önce yayın yapılandırmasında oluşturarak yerel koda derleyin.
    • Otomatik bakımın test cihazının performansını etkilemediğinden emin olmak için el ile tetikleyin ve tamamlanmasını bekleyin. Windows'ta, Başlat menüsünde Güvenlik ve Bakım'ı arayın. Bakım alanındaki Otomatik Bakımaltında, Bakımı Başlat'ı seçin ve durumun Bakım Devam Ediyor'dan değişmesini bekleyin.
    • Rastgele test değişkenlerini ortadan kaldırmaya yardımcı olmak ve tutarlı ölçümler sağlamaya yardımcı olmak için uygulamayı birden çok kez çalıştırın.
  • Azaltılmış güç kullanılabilirliği için test edin. Kullanıcılarınızın cihazının gücü geliştirme makinenizden önemli ölçüde daha az olabilir. Windows, mobil cihazlar gibi düşük güçlü cihazlar düşünülerek tasarlanmıştır. Platformda çalışan uygulamalar, bu cihazlarda iyi performans göstermelerini sağlamalıdır. Buluşsal olarak, düşük güçte bir cihazın masaüstü bilgisayarın yaklaşık dörtte birinde çalışmasını ve hedeflerinizi buna göre belirlemesini bekleyebilirsiniz.
  • Uygulama performansını ölçmek için Microsoft Visual Studio ve Windows Performans Çözümleyicisi gibi araçların bir birleşimini kullanın. Visual Studio, kaynak kodu bağlama gibi uygulama odaklı analiz sağlamak için tasarlanmıştır. Windows Performans Çözümleyicisi, sistem bilgisi sağlama, dokunma işleme olayları hakkında bilgi ve disk girişi/çıkışı (G/Ç) ve grafik işlem birimi (GPU) maliyeti gibi sistem odaklı analiz sağlamak üzere tasarlanmıştır. Her iki araç da iz kaydetme ve dışa aktarma sağlar ve paylaşılan izleri ve post-mortem izlemeleri yeniden açabilir.
  • Uygulamanızı sertifikasyon için Mağaza'ya göndermeden önce, Windows Uygulama Sertifikasyon Seti testlerinin "Performans testleri" bölümünde ve UWP uygulama test çalışmalarının "Performans ve kararlılık" bölümünde açıklandığı gibi test planlarınıza dahil olduğunuzdan emin olun.

Daha fazla bilgi için bu kaynaklara ve profil oluşturma araçlarına bakın.

Performans testi sonuçlarına yanıt verme

Performans testi sonuçlarınızı analiz ettikten sonra herhangi bir değişiklik gerekip gerekmediğini belirleyin, örneğin:

  • Uygulama tasarımı kararlarınızdan herhangi birini değiştirmeli veya kodunuzu iyileştirmeli misiniz?
  • Koddaki enstrümantasyondan herhangi birini eklemeniz, kaldırmanız veya değiştirmenizi istiyor musunuz?
  • Performans hedeflerinizden herhangi birini gözden geçirmeniz gerekir mi?

Herhangi bir değişiklik gerekiyorsa, bunları yapın ve ardından izleme veya test aşamasına dönün ve tekrarlayın.

Optimize Etme

Yalnızca uygulamanızdaki performans açısından kritik kod yollarını iyileştirin: en çok zaman harcanan yollar. Profil oluşturma size hangisi olduğunu söyleyecektir. Genellikle, iyi tasarım uygulamalarını izleyen yazılım oluşturma ile en yüksek iyileştirmede performans gösteren kod yazma arasında bir denge vardır. Performansın önemli olmadığı alanlarda geliştirici üretkenliğini ve iyi yazılım tasarımını önceliklendirmek genellikle daha iyidir.