Aracılığıyla paylaş


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ı en aza indirin
  • Arka plandayken kaynakları serbest bırakma
  • 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 uygulamayö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 veri dosyaları (örneğin, veritabanları) aracılığıyla meydana gelir. Bu genellikle bir uygulamanın bellek kullanımının önemli bir öbekleri değildir ve genellikle sabittir. (İstisnalar veri işleme uygulamaları, kod derleme vb.) Bellek kullanımının ve sızıntıların ortaya çıktığı daha önemli kaynak 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 bir sistem izleme kaydı yapın

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üre çalışan 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 ve genellikle birkaç dakika süren bir izleme, bellek sızıntılarını tanılamada 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.

Bir iz 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. Şu komutu girin: wpr -start VirtualAllocation -filemode

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

  4. Şu komutu girin: wpr -stop Trace.etl

Sistem izlemesini analiz etme

Uygulamanızın hangi işlevlerinin tahsis edilen belleği azaltabileceğinizi bulmak için, yakalanan sistem izleme kaydını analiz etmeniz gerekir. İzleri analiz etmek için:

  1. Windows Performance Analyzerkullanarak şu komutu girerek izleri açın: wpa.exe Trace.etl

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

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

  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. İlgilendiğiniz işleme sağ tıklayıp Seçime Göre Filtreleseçeneğini seçerek analiz etmek istediğiniz işlemi 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 İşleme Yığını'na gidin. İşleme yığınları için sembollerininyüklenmesi gerekir. Üst gezinme menü çubuğundan İzleme>Simgeleri yükle 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, bellekte bazı önbellekler 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 bırakılabilir. 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ınbellek sızıntısı olmadığından emin olun: Bellek sızıntılarını denetlemek için, önce uygulama bellek kullanımı platolarının veya belirli bir değerin ötesine geçmediği sabit bir durum karşılaştırması 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 taahhüt 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 doldukça, dosya sistemi artık yeni içeriği 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çeriğin bitişik olması ve daha büyük G/Ç'ler kullanılarak sıralı şekilde erişilmesi durumunda disk aktarım hızını çok daha iyi 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