Uygulama Başlangıç Zamanı

BIR WPF uygulamasının başlatılması için gereken süre büyük ölçüde değişebilir. Bu konuda, Bir Windows Presentation Foundation (WPF) uygulaması için algılanan ve gerçek başlangıç süresini azaltmaya yönelik çeşitli teknikler açıklanmaktadır.

Soğuk Başlangıç ve Sıcak Başlangıç'ı anlama

Sistem yeniden başlatıldıktan sonra uygulamanız ilk kez başlatıldığında veya uygulamanızı başlattığınızda, kapatıp uzun bir süre sonra yeniden başlattığınızda soğuk başlatma gerçekleşir. Bir uygulama başlatıldığında, windows bellek yöneticisinin bekleme listesinde gerekli sayfalar (kod, statik veriler, kayıt defteri vb.) yoksa sayfa hataları oluşur. Disk erişimi, sayfaları belleğe getirmek için gereklidir.

Sık başlatma, ana ortak dil çalışma zamanı (CLR) bileşenlerinin sayfalarının çoğu bellekte zaten yüklendiğinde oluşur ve bu da pahalı disk erişim süresinden tasarruf sağlar. Bu nedenle, yönetilen bir uygulama ikinci kez çalıştırıldığında daha hızlı başlatılır.

Giriş Ekranı Uygulama

Bir uygulamayı başlatma ile ilk kullanıcı arabirimini görüntüleme arasında önemli ve kaçınılmaz bir gecikme olduğu durumlarda, giriş ekranı kullanarak algılanan başlangıç süresini iyileştirin. Bu yaklaşım, kullanıcı uygulamayı başlattığından hemen sonra bir görüntü görüntüler. Uygulama ilk kullanıcı arabirimini görüntülemeye hazır olduğunda, giriş ekranı kaybolur. .NET Framework 3.5 SP1'den başlayarak, giriş ekranı uygulamak için sınıfını kullanabilirsiniz SplashScreen . Daha fazla bilgi için bkz . WPF Uygulamasına Giriş Ekranı Ekleme.

Yerel Win32 grafiklerini kullanarak kendi giriş ekranınızı da uygulayabilirsiniz. Yöntemi çağrılmadan önce Run uygulamanızı görüntüleyin.

Başlangıç Kodunu Analiz Etme

Yavaş bir soğuk başlatmanın nedenini belirleyin. Disk G/Ç sorumlu olabilir, ancak her zaman böyle değildir. Genel olarak, ağ, Web hizmetleri veya disk gibi dış kaynakların kullanımını en aza indirmeniz gerekir.

Test etmeden önce, başka çalışan uygulamaların veya hizmetlerin yönetilen kod veya WPF kodu kullanmadığını doğrulayın.

Yeniden başlatmadan hemen sonra WPF uygulamanızı başlatın ve görüntülenmesinin ne kadar sürdüğünü belirleyin. Uygulamanızın sonraki tüm başlatmaları (sıcak başlatma) çok daha hızlıysa, soğuk başlatma sorununuz büyük olasılıkla G/Ç'nin neden olduğu bir sorundur.

Uygulamanızın soğuk başlatma sorunu G/Ç ile ilgili değilse, uygulamanızın uzun bir başlatma veya hesaplama gerçekleştirmesi, bir olayın tamamlanmasını beklemesi veya başlangıçta çok fazla JIT derlemesi gerektirmesi olasıdır. Aşağıdaki bölümlerde bu durumlardan bazıları daha ayrıntılı olarak açıklanmaktadır.

Modül Yüklemeyi en iyi duruma getirme

Uygulamanızın hangi modülleri yüklediğini belirlemek için İşlem Gezgini (Procexp.exe) ve Tlist.exe gibi araçları kullanın. komutu Tlist <pid> , bir işlem tarafından yüklenen tüm modülleri gösterir.

Örneğin, Web'e bağlanmıyorsanız ve System.Web.dll yüklendiğini görüyorsanız, uygulamanızda bu derlemeye başvuran bir modül vardır. Başvurunun gerekli olduğundan emin olun.

Uygulamanızın birden çok modülü varsa bunları tek bir modülde birleştirin. Bu yaklaşım daha az CLR derleme yükleme yükü gerektirir. Daha az derleme, CLR'nin daha az durum koruduğu anlamına da gelir.

Başlatma İşlemlerini Ertele

Başlatma kodunu ana uygulama penceresi işlenene kadar erteebilirsiniz.

Başlatmanın bir sınıf oluşturucusunun içinde gerçekleştirilebileceğini ve başlatma kodu diğer sınıflara başvuruyorsa, çok sayıda sınıf oluşturucunun yürütülürken basamaklı bir etkiye neden olabileceğini unutmayın.

Uygulama Yapılandırmasından Kaçının

Uygulama yapılandırmasından kaçınmayı göz önünde bulundurun. Örneğin, bir uygulamanın basit yapılandırma gereksinimleri varsa ve katı başlangıç zamanı hedefleri varsa, kayıt defteri girdileri veya basit bir INI dosyası daha hızlı bir başlangıç alternatifi olabilir.

GAC'yi kullanma

Bir derleme Genel Bütünleştirilmiş Kod Önbelleği'ne (GAC) yüklenmemişse, güçlü adlandırılmış derlemelerin karma doğrulamasından ve bu derleme için yerel bir görüntü bilgisayarınızda varsa Ngen görüntü doğrulamasından kaynaklanan gecikmeler vardır. GAC'de yüklü tüm derlemeler için tanımlayıcı ad doğrulaması atlanır. Daha fazla bilgi için bkz . Gacutil.exe (Genel Bütünleştirilmiş Kod Önbelleği Aracı).

Ngen.exe kullanma

Uygulamanızda Yerel Görüntü Oluşturucu'Ngen.exe kullanmayı göz önünde bulundurun. Ngen.exe kullanmak, Ngen.exe tarafından oluşturulan yerel görüntünün MSIL görüntüsünden daha büyük olması muhtemel olduğundan daha fazla disk erişimi için CPU tüketiminin alım satımı anlamına gelir.

Sıcak başlangıç süresini iyileştirmek için uygulamanızda her zaman Ngen.exe kullanmanız gerekir çünkü bu, uygulama kodunun JIT derlemesinin CPU maliyetini önler.

Bazı soğuk başlangıç senaryolarında Ngen.exe kullanmak da yararlı olabilir. Bunun nedeni JIT derleyicisinin (mscorjit.dll) yüklenmesinin gerekmemesidir.

Hem Ngen hem de JIT modüllerinin olması en kötü etkiye sahip olabilir. Bunun nedeni mscorjit.dll yüklenmesi gerekir ve JIT derleyicisi kodunuz üzerinde çalıştığında, JIT derleyicisi derlemelerin meta verilerini okuduğunda Ngen görüntülerindeki birçok sayfaya erişilmesi gerekir.

Ngen ve ClickOnce

Uygulamanızı dağıtmayı planlama şekliniz de yükleme süresinde bir fark oluşturabilir. ClickOnce uygulama dağıtımı Ngen'i desteklemez. Uygulamanız için Ngen.exe kullanmaya karar verirseniz, Windows Installer gibi başka bir dağıtım mekanizması kullanmanız gerekir.

Daha fazla bilgi için bkz . Ngen.exe (Yerel Görüntü Oluşturucu).

Yeniden Boyutlandırma ve DLL Adresi Çakışmaları

Ngen.exe kullanıyorsanız, yerel görüntüler belleğe yüklendiğinde yeniden dengelemenin gerçekleşebileceğini unutmayın. Bu adres aralığı zaten ayrılmış olduğundan, bir DLL tercih edilen temel adrese yüklenmezse, Windows yükleyicisi bunu başka bir adrese yükler ve bu da zaman alan bir işlem olabilir.

Tüm sayfaların özel olduğu modüller olup olmadığını denetlemek için Sanal Adres Dökümü (Vadump.exe) aracını kullanabilirsiniz. Bu durumda modül farklı bir adrese yeniden temellenmiş olabilir. Bu nedenle, sayfaları paylaşılamaz.

Temel adresi ayarlama hakkında daha fazla bilgi için bkz . Ngen.exe (Yerel Görüntü Oluşturucu).

Authenticode'i en iyi duruma getirme

Authenticode doğrulaması başlangıç zamanına eklenir. Authenticode imzalı derlemelerin sertifika yetkilisi (CA) ile doğrulanması gerekir. Geçerli sertifika iptal listelerini indirmek için ağa birkaç kez bağlanmayı gerektirebileceğinden bu doğrulama zaman alabilir. Ayrıca, güvenilir bir kök yolunda geçerli sertifikalardan oluşan tam bir zincir olmasını sağlar. Bu, derleme yüklenirken birkaç saniyelik gecikmeye çevrilebilir.

CA sertifikasını istemci bilgisayara yüklemeyi göz önünde bulundurun veya mümkün olduğunda Authenticode kullanmaktan kaçının. Uygulamanızın yayımcı kanıtına ihtiyacı olmadığını biliyorsanız, imza doğrulama maliyetini ödemeniz gerekmez.

.NET Framework 3.5'den başlayarak Authenticode doğrulamasının atlanmasını sağlayan bir yapılandırma seçeneği vardır. Bunu yapmak için app.exe.config dosyasına aşağıdaki ayarı ekleyin:

<configuration>  
    <runtime>  
        <generatePublisherEvidence enabled="false"/>
    </runtime>  
</configuration>  

Daha fazla bilgi için bkz <. generatePublisherEvidence> Öğesi.

Windows Vista'da Performansı Karşılaştırma

Windows Vista'daki bellek yöneticisinin SuperFetch adlı bir teknolojisi vardır. SuperFetch, belirli bir kullanıcı için en uygun bellek içeriğini belirlemek üzere zaman içindeki bellek kullanım desenlerini analiz eder. Bu içeriği her zaman korumak için sürekli çalışır.

Bu yaklaşım, kullanım desenlerini analiz etmeden verileri belleğe önceden yükleyen Windows XP'de kullanılan ön getirme tekniğinden farklıdır. Zaman içinde, kullanıcı Windows Vista'da WPF uygulamanızı sık sık kullanıyorsa uygulamanızın soğuk başlangıç süresi iyileştirebilir.

AppDomains'i Verimli Kullanma

Mümkünse, yerel görüntünün varsa uygulamada oluşturulan tüm AppDomain'lerde kullanıldığından emin olmak için derlemeleri etki alanından bağımsız bir kod alanına yükleyin.

En iyi performans için, etki alanları arası çağrıları azaltarak etkili etki alanları arası iletişimi zorunlu kılın. Mümkün olduğunda, bağımsız değişken olmadan veya ilkel tür bağımsız değişkenleriyle çağrıları kullanın.

NeutralResourcesLanguage Özniteliğini Kullanma

NeutralResourcesLanguageAttribute için nötr kültürü belirtmek için kullanınResourceManager. Bu yaklaşım başarısız derleme aramalarını önler.

Serileştirme için BinaryFormatter Sınıfını Kullanma

Serileştirme kullanmanız gerekiyorsa, sınıfı yerine sınıfını XmlSerializer kullanınBinaryFormatter. sınıfı BinaryFormatter , mscorlib.dll derlemesindeki Temel Sınıf Kitaplığı'nda (BCL) uygulanır. XmlSerializer, yüklenecek ek bir DLL olabilecek System.Xml.dll derlemesinde uygulanır.

sınıfını XmlSerializer kullanmanız gerekiyorsa, serileştirme derlemesini önceden oluşturursanız daha iyi performans elde edebilirsiniz.

ClickOnce'ı Başlangıçtan Sonra Güncelleştirmeler Denetleyecek Şekilde Yapılandırma

Uygulamanız ClickOnce kullanıyorsa, clickOnce'ı uygulama başlatıldıktan sonra dağıtım sitesini güncelleştirmeleri denetlemek üzere yapılandırarak başlangıçta ağ erişiminden kaçının.

XAML tarayıcı uygulaması (XBAP) modelini kullanıyorsanız, XBAP zaten ClickOnce önbelleğinde olsa bile ClickOnce'ın dağıtım sitesini güncelleştirmeler için denetlediğini unutmayın. Daha fazla bilgi için bkz . ClickOnce Güvenlik ve Dağıtım.

Uyarı

XBAP'ler, Internet Explorer ve Firefox gibi eski tarayıcıların çalıştırılmasını gerektirir. Bu eski tarayıcı sürümleri genellikle Windows 10 ve Windows 11'de desteklenmez. Modern tarayıcılar artık güvenlik riskleri nedeniyle XBAP uygulamaları için gereken teknolojiyi desteklemiyor. XBAP'leri etkinleştiren eklentiler artık desteklenmemektedir.

PresentationFontCache Hizmetini Otomatik Olarak Başlatacak Şekilde Yapılandırma

Yeniden başlatmadan sonra çalıştırılacak ilk WPF uygulaması PresentationFontCache hizmetidir. Hizmet sistem yazı tiplerini önbelleğe alır, yazı tipi erişimini geliştirir ve genel performansı geliştirir. Hizmeti başlatmanın bir yükü vardır ve bazı denetimli ortamlarda, sistem yeniden başlatıldığında hizmeti otomatik olarak başlatacak şekilde yapılandırmayı göz önünde bulundurun.

Veri Bağlamayı Program Aracılığıyla Ayarlama

Ana pencere için bildirim temelli olarak ayarlamak DataContext üzere XAML kullanmak yerine yönteminde program aracılığıyla ayarlamayı OnActivated göz önünde bulundurun.

Ayrıca bkz.