Bellek ve disk alanı kullanımını azaltarak uygulama performansını geliştirme

Bu kılavuz, Windows uygulamanızın performansını iki birincil yolla geliştirmeyi gösterir:

Bellek kullanımını en aza indirme

Windows uygulamanızın kullandığı bellek miktarını en aza indirmenin çeşitli yolları vardır:

  • Ön plan bellek kullanımını azaltma
  • Arka plan çalışmasını azaltma
  • Arka plandayken kaynakları serbest bırakın
  • Uygulamanızın bellek sızıntısı olmadığından emin olun

Bellek kullanımını uygun şekilde en aza indirmek için öncelikle şunları anlamak önemlidir:

Analiz edilecek bir sistem izlemeniz olduğunda bellek kullanımını azaltmak için izleme analizinizi uygulama yönergelerini öneririz.

Çalışma kümesi, dinamik bellek ve sanal ayırma

Bir uygulamanın çalışma kümesi (şu anda bellekte yerleşik olan sanal adres alanında bulunan sayfa kümesi), uygulamanın bellek kullanımının bir ölçüsüdür.

Bir uygulamanın kullandığı bellek miktarı, çalışma zamanı performansını ve sistemin bir bütün olarak yanıt verme hızını etkiler. Bellek kullanımını en aza indirmek, daha fazla belleğe erişimle ilişkili CPU maliyetlerini azaltarak uygulamanın daha iyi performans göstermesine yardımcı olur. Daha düşük bellek kullanımı, sistem yanıt hızına ve uygulama kullanıcısının genel olarak deneyimine de yardımcı olur çünkü uygulama diğer bellek içeriğini dağıtmaz.

Sistem yakın zamanda erişilen bellek içi içeriği saklamaya çalıştığında ve gerekirse daha önce kullanılan içeriği kırpıp sayfa dışarı çıkardıkça bellekte yer değiştirme gerçekleşebilir. Kullanıcı kabuğa veya başka bir uygulamaya geri döndüğünde ve gerekli veriler bellekte yerleşik değilse, verilerin diskten okunması gerekir. Kullanıcı büyük olasılıkla bu işlem nedeniyle bir yavaşlama fark edecektir.

Bir uygulama tarafından kullanılan bellekte iki önemli parça vardır: 1) dinamik bellek ve 2) dosya destekli bellek. Dosya destekli bellek kullanımı, bir uygulama tarafından kullanılan ikili dosyalar ve veritabanları gibi veri dosyalarından kaynaklanır. Bu genellikle bir uygulamanın bellek kullanımının önemli bir öbekleri değildir ve genellikle sabittir. (Özel durumlar veri işleme uygulamaları, kod derleme vb.) Bellek kullanımının daha önemli kaynağı ve sızıntı bildirimi dinamik bellektir.

Dinamik bellek, bellek ayırma yordamları kullanılarak bir uygulama tarafından ayrılan sanal belleğe karşılık gelir. Sistem yeniden başlatmalarında kalıcı olan dosya destekli belleklerden farklı olarak, dinamik bellek yalnızca uygulamanın ömrü boyunca mevcuttur. Dinamik bellek yaygın olarak önemli bir bellek kullanımı kaynağıdır ve bellek sızıntılarının bildirildiği yerdir.

Sanal Ayırma yordamları (VirtualAlloc) bir Windows uygulamasından gelen bellek ayırma isteklerini, bellek ayırma için kullanılan uygulama katmanı yordamından bağımsız olarak işler. Bir uygulama tarafından ayrılan belleğin tümü her zaman bellekte yer almasa da, bu ayırmaların çözümlenmesi uygulamanın bellek kullanımını anlamak için tutarlı bir yol sağlar.

Uygulamanızın bellek kullanımını anlamak ve geliştirme yapmak için yer bulmak için aşağıda açıklandığı gibi bir VirtualAllocation izlemesi yakalamanızı öneririz.

Bellek kullanımını analiz etmek için sistem izleme kaydı yakalama

Cihaz etkinliğini belirli bir süre boyunca kaydetmek sistem izleme olarak bilinir. Sistem izleme, rapor oluşturmak ve uygulamanızın performansını nasıl geliştirebileceğinizi belirlemenize yardımcı olmak için kullanılabilecek bir izleme dosyası oluşturur.

İzlerin uzunluğu değişebilir.

  • Bir uygulamanın başlatılmasını yakalamak için kısa süreli bir izleme kullanılabilir. Bu, uygulamanızın uygulama penceresinin simge durumuna küçültüldüğü veya uygulama işlemi devam ederken uygulama pencerelerinin kapatıldığı etkin olmayan duruma geçişini içerebilir.
  • Uzun süreli bir izleme, genellikle birkaç dakika sürer, bellek sızıntılarını teşhis etmede yararlıdır. Bellek kullanımı zaman içinde eğilimini artırmaya devam ederse, bu genellikle bir sızıntı önerisinde bulunur.

Bellek kullanımını izlemek için kullanabileceğiniz birden çok araç vardır:

Bu makalenin amaçları doğrultusunda Windows Performans Çözümleyicisi'ni kullanmaya odaklanacağız. Uygulamanızın performansının profilini oluşturmak için bir araç seçme hakkında daha fazla bilgi edinmek için bkz. Visual Studio Performans Profili Oluşturucu, Windows Performans Araç Seti ve PerfView arasında seçim yapmak.

İz yakalamak için:

  1. Yönetici modunda bir komut satırı (PowerShell veya Komut İstemi) açın. (Yönetici modunda çalıştırılmazsa hata kodu alabilirsiniz: 0xc5585011, "sistem performansının profilini oluşturma ilkesi etkinleştirilemedi.")

  2. Komutunu girin: wpr -start VirtualAllocation -filemode

  3. Araştırdığınız senaryoyu çalıştırın. (Örneğin, uygulamanızı başlatma.)

  4. Komutunu girin: wpr -stop Trace.etl

Sistem izini analiz et

Uygulamanızın işlevlerinden hangilerinin atanmış belleğini azaltabileceğinizi bulmak için, yakalanan sistem izleme verilerini analiz etmeniz gerekir. İzleri analiz etmek amacıyla:

  1. Windows Performans Çözümleyicisi'ni kullanarak komutunu girerek izlemeyi açın:wpa.exe Trace.etl

  2. Grafik Gezgini penceresindeBellek bölümünü genişletin, Toplam İşleme grafiğine sağ tıklayın ve Yeni Çözümleme Görünümüne grafik ekle'yi seçin.

  3. Ayarlar dişlisine tıklayıp şu sütun düzenlemesini seçerek Görünüm Düzenleyicisi'ni açın: İşlem, İşleme Türü, İşleme Yığını ve Boyut.

  4. Sonuçların azalan düzende sıralanması için Boyut sütun başlığına tıklayın. İşleme Yığını, belleğin ayrılmasına yol açan kod yolunu gösterir. Bu sonuçlar ayırmanın nedenini anlamanıza yardımcı olabilir. Boyuta göre sıralamak, daha büyük ayırmalara odaklanmanızı ve iyileştirme fırsatı olup olmadığını araştırmanızı sağlar.

  5. İşleme sağ tıklayıp Seçime Göre Filtrele'yi seçerek analiz etmek istediğiniz işlemlere göre filtreleyin.

  6. Görünüm penceresinde ilgilendiğiniz bölgeyi yakınlaştırmak için bir aralık seçin, grafiğe sağ tıklayın ve Yakınlaştır'ı seçin.

  7. Hangi işlevlerin bellek ayırmış olduğunu anlamak için Commit Stack'e göz atın. Taahhüt yığınları semboller yüklenmiş olmalıdır. Üst gezinme çubuğundaki İzle>Simgeleri Yükle'yi seçin.

    Windows Performans Çözümleyicisi bellek izleme ekran görüntüsü

Bellek kullanımını azaltmak için izleme analizinizi uygulama

Ayrılan belleği analiz ederek bellek kullanımının nerede en aza indirilebileceğine karar vermenize yardımcı olacak ipuçları bulacaksınız.

Bellek kullanımını azaltmak için kodunuzu güncelleştirmeye yönelik izleme analizinizi uygulama konusunda göz önünde bulundurmanız gereken birkaç alan şunlardır:

  • Ön plandayken bellek kullanımını azaltma: Bellek izlemesini çözümlemek, ön planda gereksiz bellek kullanımını belirlemenize ve bu kullanımı azaltmak veya kaldırmak için kodunuzu güncelleştirmenize yardımcı olabilir.

  • Arka planda çalışırken çalışmayı en aza indirme: Sistemin, işlem çalışma kümelerindeki sayfaları eskitmeye yönelik ilkeleri vardır. Arka planda daha az bellek kullanmak, uygulamanın bellekte daha az yerleşik kalmasını sağlayarak sistemin daha verimli olmasını sağlar. Arka plan çalışmasını en aza indirerek güç tüketimini ve pil ömrünü iyileştirme hakkında daha fazla bilgi edinin. Bu işlem arka planda daha az bellek kullanımına da dönüşür.

  • Arka planda kaynakları serbest bırakma: Çalışma zamanında, bir uygulama bazı bellek önbellekleri oluşturabilir ve kullanıcı arabirimini desteklemek için grafik tahsisleri yapabilir. Uygulama simge durumuna küçültüldüğünde veya görünmediğinde bu ayırmalar serbest kalabilir. Bir uygulama, bu tür eylemleri gerçekleştirmek için düşük bellek bildirimlerine kaydolabilir, ancak uygulama devre dışı olduğu sonucuna vardığında kullanılmadığı bir süre sonra belleği boşaltmak daha iyi bir strateji olabilir. Bu kullanım dışı kalma süresi uygulamaya göre farklılık gösterebilir, bu nedenle etkin olmayan kullanımın olası göstergeleri birkaç dakika ile 1/2 saat veya daha fazla arasında değişebilir. Bu tür bellek tasarruflarını yanıt verme hızıyla dengelemek için dikkatli olunmalıdır. Önbelleğin yeniden oluşturulması pahalıysa, uygulama bunu uygulamanın ömrü boyunca saklamayı seçebilir.

  • Uygulamanızın bellek sızıntısı olmadığından emin olun: Bellek sızıntılarını denetlemek için, önce uygulama bellek kullanımının belirli bir değerin ötesine geçmediği veya sabit kaldığı sabit durum karşılaştırmasını oluşturun. Uygulamayı sürekli kullanarak veya arka planda boşta bırakarak bu kararlı durumu oluşturabilirsiniz. Olası bir bellek sızıntısını belirlemek için yakaladığınız izlemeyi kullanarak, kodunuzda bu belleğin nereye ayrıldığını ve amacına hizmet ettikten sonra nasıl kullanımdan bırakılabildiğini bulabilirsiniz. Uygulama çalışırken bellek büyümeye devam ederse, bu büyük olasılıkla bellek sızıntısının göstergesidir. İzlemenizdeki büyümeye karşılık gelen bölgeyi yakınlaştırın ve işleme yığınlarını dikkatlice analiz edin.

Disk Alanını verimli bir şekilde kullanma

Disk ayak izi , bir uygulamanın etkin olmayan bir durumda depolandığında (kod yürütülmediğinde) boyutuna başvurur. Uygulama çok fazla disk ayak izi kaplarsa iyileştirme fırsatı olabilir.

Uygulamanızın disk ayak izini azaltmanın performansı artırmasının çeşitli yolları vardır:

  • Disk dolduğunda, dosya sistemi yeni içeriği artık bitişik bir şekilde depolayamaz. Tam disk parçalanır ve yeni içerik bitişik olmayan kesimlerde depolanır. Bu, içeriğe diskten erişildiğinde daha uzun gecikme süresine dönüşür. G/Ç sistemleri, içerik bitişik olduğunda ve sırayla veya daha büyük G/Ç'ler kullanılarak erişildiğinde çok daha iyi disk aktarım hızı sağlar.

  • Tam disk, SSD tabanlı sistemler için daha uzun yazma gecikme sürelerine çevrilebilir. Yazmaları emecek daha az boş hücre olduğunda, yazma işlemi okuma-değiştirme-yazma işlemine neden olabilir ve performansı yavaşlatabilir.

  • Tam disk, uygulamanızı güncelleştirme özelliğini engelleyebilir. İşletim sistemi dayanıklı ve sistemi güncel ve güvenli tutabilse de, düşük kullanılabilir disk alanı olsa bile, uygulama güncelleştirmenizin içeriğini hazırlamaya yönelik iyi durumdaki kullanılabilir disk alanı daha hızlı ve sorunsuz bir güncelleştirme deneyimine dönüşür.

  • Çalışma zamanında erişilecek büyük miktarda disk ayak izinin gerekli olması bellek kullanımına da çevrilir. Bu, uygulamanızın ve sistemin yanıt hızını genel olarak etkiler. Ayrıca, çalışma zamanında disk ayak izinin küçük bir oranı gerekiyorsa, uygulama verimsiz bir şekilde disk alanı kullanıyor olabilir.

Disk alanınızı azaltmanın veya daha verimli olmanın birkaç yolu şunlardır:

  • Disk ayak izinize "oynamak için öde" ilkelerini uygulayın (yalnızca ihtiyacınız olanı indirin): Bir uygulama, tüm kullanıcılara uygulanmayan çok çeşitli özellikler içerebilir. Bu, disk ayak izinin büyük olmasının bir nedeni olabilir. "Kullan-öde" ilkelerini uygulayarak, kullanıcılardan yalnızca ihtiyaç duydukları özellikleri indirmeyi seçip uygulamanızı indirdiklerinde daha küçük bir disk ayak izine çevirmelerini isteyebilirsiniz. Ek içerik, yalnızca kullanıcının daha zengin özelliklere ihtiyacı olduğunda indirme için isteğe bağlı hale getirilmiştir. Özelliklere ek olarak, dil desteğine de aynı "oynamak için öde" ilkelerini uygulayabilirsiniz. Uygulama, isteğe bağlı olarak eklenen veya kullanıcının sisteminde ayarlanan konuma bağımlı olan ek dillerle varsayılan olarak popüler dil seçimlerinin bir alt kümesini içerebilir.

  • Verimli önbellek boyutlandırması uygulama: Bazı durumlarda bir uygulama, kullanıcı deneyimini daha hızlı yanıtlamak için disk içi önbellekleri kullanabilir. İlkeler, disk kapasitesine göre önbellek boyutu üst sınırı belirlenmiş ve diskte kullanılabilir alan az olduğunda önbelleği yeniden boyutlandırarak uygulamanızın önbelleği yönetme şekli için ayarlanabilir.

  • Varlıkların verimli kullanımını uygulama: Bir uygulama genellikle görüntü varlıklarını içerir ve birden çok çözünürlüğü desteklemek için bir dizi görüntü boyutundan oluşabilir. Çözünürlüğün bir alt kümesi için görüntü boyutunu, boyutlarını, biçimini ve sıkıştırmasını iyileştirmek ve kalan çözünürlükleri desteklemek için ölçeklendirmeden yararlanarak disk ayak izini önemli ölçüde azaltabilir.

  • İkili iyileştirme fırsatlarını araştırma: SizeBench gibi araçlar, uygulama yazarlarının ikili ayak izine nelerin katkı sağladığını araştırmalarına ve kullanılan disk alanı miktarını azaltma fırsatları bulmalarına olanak tanır.

Ek kaynaklar