Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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. Hedefleri belirtin ve sonuçları ölçün; bunlar önemli faktörlerdir. Performans açısından kritik senaryolarınızı belirleyin, iyi performansın ne anlama geldiğini tanımlayın ve ardından hedeflerinize ulaşmanızdan emin olmak için projenizin yaşam döngüsü boyunca erken ve sıklıkla ölçü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. Kullanıcı, bir saniyeden kısa bir uygulama başlatma süresini mükemmel, beş saniyeden az iyi ve beş saniyeden uzun bir sürenin kötü olduğunu düşünebilir.
Diğer ölçümlerin bellek gibi kullanıcı deneyimi üzerinde daha az belirgin etkisi vardır. Bir uygulamanın askıya alınmış veya etkin olmayan durumdayken sonlandırılma olasılığı, etkin uygulamanın kullandığı bellek miktarıyla artar. Yüksek bellek kullanımı sistemdeki tüm uygulamalar için deneyimi düşürür, bu nedenle bellek tüketimi hedefine sahip olmak mantıklıdır.
Belirli ve ölçülebilir ilk hedefleri ayarlayın. Üç kategoriye girmelidir:
- Zaman — kullanıcıların veya uygulamanın görevleri tamamlaması ne kadar sürer?
- Akıcılık — uygulamanın kullanıcı etkileşimine yanıt olarak kendisini yeniden çizdiği hız ve süreklilik
- Verimlilik — uygulamanın pil gücü de dahil olmak üzere sistem kaynaklarından ne kadar tasarruf sağlar?
Time
Kullanıcıların görevlerini tamamlaması için geçen kabul edilebilir zaman aralıklarını (etkileşim sınıfları) düşünün.
| Etkileşim sınıfı | Kullanıcı algısı | Ideal | Maximum | Examples |
|---|---|---|---|---|
| Hızlı | En az fark edilebilir gecikme | 100 ms | 200 ms | Uygulama çubuğunu açın; düğmeye basma (ilk yanıt) |
| Tipik | Hızlı, ancak hızlı değil | 300 ms | 500 ms | Yeniden boyutlandır; anlamsal yakınlaştırma |
| Duyarlı | Hızlı değil, ancak duyarlı hissediyor | 500 ms | 1 saniye | Farklı bir sayfaya gidin; uygulamaya geri dönün |
| Launch | Rekabet odaklı deneyim | 1 saniye | 3 saniye | Uygulamayı ilk kez başlatma |
| Devamlı | Artık yanıt vermiyor | 500 ms | 5 saniye | İnternet'ten dosya indirme |
| Esir | Uzun sürüyor; kullanıcı başka bir yere geçebilir | 500 ms | 10 saniye | Mağaza'dan birden çok uygulama yükleme |
Uygulamanızın performans senaryolarına etkileşim sınıfları atayın. Her senaryo için uygulamanın belirli bir zamansal referansını, kullanıcı deneyiminin bir bölümünü ve bir etkileşim sınıfını atayın.
Akışkanlık
Uygulamanız için belirli ölçülebilir akıcılık hedefleri şunlar olabilir:
- Ekranın yeniden çizilmesinde duraksamalar ve teklemeler (aksaklıklar) yok
- Animasyonlar saniyede 60 karede işlenir (FPS)
- Bir kullanıcı ekranı kaydırdığında veya kaydırarak gezindiğinde, uygulama saniyede 3–6 sayfalık içerik sunar
Efficiency
Uygulamanız için belirli ölçülebilir verimlilik hedefleri şunlar olabilir:
- Uygulamanızın CPU yüzdesi hedef değerde veya altında, MB cinsinden bellek kullanımı ise her zaman bir hedefte veya altında
- Uygulama etkin olmadığında CPU ve bellek kullanımı en düşük düzeydedir
- Uygulamanız pil gücünde hedef saat sayısı için etkin olarak kullanılabilir
Uygulamanızı performans için tasarlama
Uygulamanızın tasarımını etkilemek için performans hedeflerinizi kullanın. Şu yönleri göz önünde bulundurun:
Kullanıcı Arayüzü
- XAML işaretlemenizi iyileştirerek her sayfa için ayrıştırma ve yükleme süresi ile bellek verimliliğini en üst düzeye çıkarın. Gerekli olana kadar kullanıcı arabirimini ve kodu yüklemeyi erteleyebilirsiniz.
-
ListViewveGridViewiçin, tüm öğeleri aynı boyutta yapın ve olabildiğince çok optimizasyon tekniği kullanın. - Kullanıcı arayüzünü kod içinde buyrumsal olarak oluşturmak yerine işaretleme dilinde tanımlayın.
- x:Load özniteliğini kullanarak kullanıcı arabirimi öğelerinin oluşturulmasını, kullanıcı bunlara ihtiyaç duyana kadar geciktirin.
- Hikaye panolu animasyonlar yerine tema geçişlerini ve animasyonları tercih edin. Storyboard’lu animasyonlar ekranın sürekli güncellenmesini gerektirir ve CPU’yu ile grafik işlem hattını aktif tutar.
- Görüntüleri, sunabileceğiniz görünüme uygun boyutta yükleyin.
CPU, bellek ve güç
- Daha düşük öncelikli görevleri daha düşük öncelikli iş parçacıklarında zamanlayın. Bkz. Zaman uyumsuz programlama ve DispatcherQueue sınıfı.
- Uygulamanızın bellek kullanımını en aza indirmek için, yüksek maliyetli kaynakları (örneğin medya) gerekli olmadıklarında serbest bırakın.
- Mümkün olduğunda, olay işleyicilerinin kaydını kaldırıp kullanıcı arayüzü öğelerine olan başvuruları kaldırarak bellek sızıntılarını önleyin.
- Pil verimliliği için verileri ne sıklıkta yokladığınız, algılayıcı sorguladığınız veya boşta olduğunda CPU üzerinde çalışmayı zamanladığınız konusunda muhafazakar olun.
Veri erişimi
- Mümkünse içeriği önceden ekleyin.
- Erişmesi pahalı olan içeriği önbelleğe alın.
- Ö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.
Performans için araç
Kodlarken, uygulamanız çalışırken belirli noktalara iletileri ve olayları günlüğe kaydeden kod ekleyin. Daha sonra uygulamanızın performansıyla ilgili bir rapor oluşturmak ve görüntülemek için Windows Performans Kaydedicisi ve Windows Performans Analizi (her ikisi de Windows Performance Toolkit dahil) gibi profil oluşturma araçlarını kullanın.
Windows, zengin bir olay günlüğü ve izleme çözümü sunan Event Tracing for Windows (ETW) tarafından desteklenen günlükleme API'leri sağlar.
Windows.Foundation.Diagnostics ad alanındaki API'ler, FileLoggingSession, LoggingActivity, LoggingChannel ve LoggingSession sınıflarını içerir.
// using Windows.Foundation.Diagnostics;
LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
myLoggingChannel.LogMessage("Here's my logged message.", LoggingLevel.Information);
Başlangıç ve durdurma olaylarını bir süre boyunca günlüğe kaydetmek için:
LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
LoggingActivity myLoggingActivity;
using (myLoggingActivity = new LoggingActivity("MyLoggingActivity", myLoggingChannel))
{
// A start event is logged when the activity begins.
// Add code here to do something of interest.
}
// An end event is logged when the activity ends.
Performans hedeflerine göre test etme ve ölçme
Uygulamanızın performans hedeflerinize göre nasıl yığılmış olduğunu test etmek için şu teknikleri ve araçları kullanın:
- Masaüstü bilgisayarlar, dizüstü bilgisayarlar, ultrabook'lar ve tabletler 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ş ekranlarda daha fazla içerik gösterilir ve bu da performansı olumsuz etkileyebilir.
- Olabildiğince çok test değişkenini ortadan kaldırın:
- Test cihazında arka plan uygulamalarını kapatın.
- Uygulamanızı test cihazına dağıtmadan önce Yayın yapılandırmasında oluşturun.
- Rastgele test değişkenlerini ortadan kaldırmaya 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 cihazlarının gücü geliştirme makinenizden önemli ölçüde daha az olabilir.
- Uygulama performansını ölçmek için Visual Studio tanılama araçları ve Windows Performans Analizi gibi araçların birleşimini kullanı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:
- Uygulama tasarım kararlarınızı değiştirmeli veya kodunuzu iyileştirmeli misiniz?
- Kodda enstrümantasyon eklemeli, kaldırmalı veya değiştirmeli misiniz?
- Performans hedeflerinizi gözden geçirmeniz gerekir mi?
Değişiklikler gerekiyorsa, bunları yapın ve izleme veya teste geri dönün.
Optimize
Yalnızca uygulamanızdaki performans açısından kritik kod yollarını ( en çok zaman harcanan kod yollarını) iyileştirin. Profil oluşturma, bunların hangi alanlar olduğunu size bildirir. Genellikle, iyi tasarım uygulamaları ve en yüksek iyileştirmede performans gösteren kodlar arasında bir denge vardır. Performansın önemli olmadığı alanlarda geliştirici üretkenliğini ve iyi yazılım tasarımını önceliklendirme.
İlgili içerik
Windows developer