Uygulama Başlangıç Zamanı

WPF uygulamasının başlaması için gereken süre büyük ölçüde farklılık gösterebilir. bu konu, bir Windows Presentation Foundation (WPF) uygulaması için algılanan ve gerçek başlangıç süresini azaltmaya yönelik çeşitli teknikler açıklamaktadır.

Soğuk başlatma ve ısınma başlangıcını anlama

Soğuk başlatma, uygulamanız sistem yeniden başlatıldıktan sonra ilk kez başlatıldığında ya da uygulamanızı başlattığınızda ve sonra uzun bir süre sonra yeniden başlattığınızda oluşur. bir uygulama başlatıldığında, gerekli sayfalar (kod, statik veriler, kayıt defteri, vb.) Windows bellek yöneticisinin bekleme listesinde yoksa, sayfa hataları oluşur. Sayfaları belleğe getirmek için disk erişimi gerekir.

Normal başlatma, ana ortak dil çalışma zamanı (CLR) bileşenleri için sayfaların çoğunun zaten belleğe yüklendiği zaman meydana gelir ve pahalı disk erişim süresini kaydeder. Bu, bir yönetilen uygulamanın ikinci bir kez çalıştırıldığında daha hızlı bir şekilde başlamasını sağlar.

Giriş ekranı uygulama

Uygulama başlatma ve ilk kullanıcı arabirimini görüntüleme arasında önemli, kaçınılmaz bir gecikme olduğu durumlarda, algılanan başlangıç süresini bir giriş ekranıkullanarak iyileştirin. Bu yaklaşım, Kullanıcı uygulamayı başlattıktan hemen hemen sonra bir resim görüntüler. Uygulama ilk kullanıcı arabirimini görüntülemeye hazırsa giriş ekranı belirir. .NET Framework 3,5 SP1 'den başlayarak, SplashScreen bir giriş ekranı uygulamak için sınıfını kullanabilirsiniz. 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 uygulamanızı görüntüleyin Run .

Başlangıç kodunu çözümle

Yavaş soğuk başlatma nedeninizi belirleme. Disk g/ç sorumlu olabilir, ancak bu durum her zaman değildir. Genel olarak, ağ, Web Hizmetleri veya disk gibi dış kaynakların kullanımını en aza indirmelisiniz.

Test etmeden önce, çalışan başka hiçbir uygulama veya hizmetin yönetilen kod veya WPF kodu kullankullanılmadığını doğrulayın.

Yeniden başlatmadan hemen sonra WPF uygulamanızı başlatın ve görüntülemenin ne kadar sürdüğünü saptayın. Uygulamanızın sonraki başlatmasının (normal başlatma) çok daha hızlı olması durumunda, soğuk başlatma sorununuz büyük olasılıkla g/ç 'den kaynaklanır.

Uygulamanızın soğuk başlatma sorunu g/ç ile ilgili değilse, uygulamanız uzun başlatma veya hesaplama gerçekleştiriyor olabilir, bazı olayların tamamlanmasını bekler veya başlangıçta çok sayıda JıT derlemesi gerektirir. Aşağıdaki bölümlerde bu durumların bazıları daha ayrıntılı olarak açıklanır.

Modül yüklemesini iyileştirme

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

Örneğin, Web 'e bağlandıysanız ve System.Web.dll yüklendiğini görürseniz, uygulamanızda bu derlemeye başvuran bir modül vardır. Başvurunun gerekli olduğundan emin olmak için kontrol edin.

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

Başlatma Işlemlerini erteleme

Ana uygulama penceresi işlenene kadar başlatma kodunu ertelendirmeyi göz önünde bulundurun.

Başlatmanın bir sınıf Oluşturucusu içinde gerçekleştirilebileceğini ve başlatma kodunun diğer sınıflara başvuruyorsa, birçok sınıf oluşturucusunun yürütüldüğü basamaklı bir etkiye neden olabileceğini unutmayın.

Uygulama yapılandırmasından kaçının

Uygulama yapılandırmasından kaçınmaktan düşünün. Örneğin, bir uygulamanın basit yapılandırma gereksinimleri varsa ve katı başlangıç zamanı hedefleri varsa, kayıt defteri girişleri veya basit bir ıNı dosyası daha hızlı bir başlangıç alternatifi olabilir.

GAC kullanın

Bir derleme genel derleme önbelleğinde (GAC) yüklü değilse, tanımlayıcı adlı derlemelerin karma doğrulamasından ve bu derleme için yerel bir görüntü bilgisayarda kullanılabiliyorsa Ngen görüntü doğrulamaya neden olan gecikmeler vardır. Kesin ad doğrulama GAC 'de yüklü tüm derlemeler için atlandı. Daha fazla bilgi için bkz. Gacutil.exe (Genel Derleme Önbelleği Aracı).

Ngen.exe kullan

Uygulamanızda Yerel görüntü oluşturucuyu (Ngen.exe) kullanmayı düşünün. Ngen.exe kullanmak, daha fazla disk erişimi için ticari CPU tüketimi anlamına gelir, çünkü Ngen.exe tarafından oluşturulan yerel görüntünün MSIL görüntüsünden büyük olması olasıdır.

Isınma başlangıç süresini artırmak için, uygulama kodunun JıT derleme CPU maliyetini önlediği için uygulamanızdaki Ngen.exe her zaman kullanmanız gerekir.

Bazı soğuk başlangıç senaryolarında Ngen.exe kullanmak da yararlı olabilir. Bunun nedeni, JıT derleyicisinin (mscorjit.dll) yüklenmesi gerekmez.

Hem NGEN hem de JıT modüllerinin bulunması en kötü etkiye sahip olabilir. Bunun nedeni mscorjit.dll yüklenmesi gerekir ve JıT derleyicisi kodunuzda çalışırken, JıT derleyicisi derlemelerin meta verilerini okuduğunda Ngen görüntülerinde birçok sayfaya erişilmesi gerekir.

Ngen ve ClickOnce

Uygulamanızı dağıtmayı planladığınız yol, yükleme sırasında da farklılık da yapabilir. ClickOnce uygulama dağıtımı Ngen 'i desteklemiyor. 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 temellendirme ve DLL adresi çakışmaları

Ngen.exe kullanıyorsanız, yerel görüntüler belleğe yüklendiğinde yeniden temellendirmesi gerçekleşebileceğini unutmayın. bir DLL, tercih edilen temel adresinde yüklü değilse, bu adres aralığı zaten ayrıldığından, Windows yükleyicisi onu 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 göre yeniden temelsiz 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 iyileştirme

Authenticode doğrulaması başlangıç zamanına ekler. Authenticode imzalı derlemelerin sertifika yetkilisi (CA) ile doğrulanması gerekir. Bu doğrulama zaman alıcı olabilir, çünkü geçerli sertifika iptal listelerini indirmek için ağa bağlanmayı birkaç kez gerektirebilir. Ayrıca, güvenilen bir köke yönelik yol üzerinde geçerli sertifikaların tam zinciri olduğundan emin olur. Bu, derleme yüklenirken birkaç saniyelik gecikmeye izin verebilir.

İstemci bilgisayara CA sertifikası yüklemeyi düşünün veya mümkünse Authenticode kullanmaktan kaçının. Uygulamanızın yayımcı kanıtını gerekli olmadığını biliyorsanız, imza doğrulama maliyetini ödemek zorunda değilsiniz.

.NET Framework 3,5 ' den başlayarak, Authenticode doğrulamanın atlanmasına izin veren 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ırın

Windows Vista 'daki bellek yöneticisinin SuperFetch adlı bir teknolojisi vardır. SuperFetch belirli bir kullanıcı için en iyi bellek içeriğini belirleme zaman içinde bellek kullanımı düzenlerini analiz eder. Bu içeriği her zaman sürdürmek için sürekli olarak işe yarar.

bu yaklaşım, Windows XP 'de kullanılan önceden getirme tekniğinden farklıdır ve bu, kullanım düzenlerini analiz etmeden verileri belleğe önceden yükler. zamanla, kullanıcı WPF uygulamanızı Windows Vista 'da sıkça kullanıyorsa, uygulamanızın soğuk başlangıç süresi iyileştirebilecek.

AppDomain 'i verimli bir şekilde kullanma

Mümkünse, bir tane varsa yerel görüntünün uygulamada oluşturulan tüm AppDomain 'de kullanılmasını sağlamak için derlemeleri etki alanı bağımsız bir kod alanına yükleyin.

En iyi performans için, etki alanları arası çağrıları azaltarak etkin çapraz etki alanı iletişimini zorlayın. Mümkün olduğunda, bağımsız değişkenler olmadan veya ilkel tür bağımsız değişkenleriyle çağrılar kullanın.

NeutralResourcesLanguage özniteliğini kullanma

NeutralResourcesLanguageAttributeİçin nötr kültürünü belirtmek için öğesini kullanın ResourceManager . 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 BinaryFormatter sınıfı yerine sınıfını kullanın XmlSerializer . BinaryFormatterSınıfı, mscorlib.dll derlemesindeki temel sınıf kitaplığı 'nda (BCL) uygulanır. , XmlSerializer Yüklemek için ek BIR DLL olabilen System.Xml.dll derlemesinde uygulanır.

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

başlangıçtan sonra güncelleştirmeleri denetlemek için ClickOnce yapılandırma

uygulamanız ClickOnce kullanıyorsa, uygulama başladıktan sonra güncelleştirmeler için dağıtım sitesini denetlemek üzere ClickOnce yapılandırarak başlangıçta ağ erişimini önleyin.

XAML tarayıcısı uygulaması (XBAP) modelini kullanıyorsanız, XBAP zaten ClickOnce önbelleğinde olsa bile, ClickOnce dağıtım sitesini kontrol ettiğini aklınızda bulundurun. daha fazla bilgi için bkz. ClickOnce Security and Deployment.

PresentationFontCache hizmetini otomatik olarak başlayacak ş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 iyiler ve genel performansı iyiler. Hizmetin başlatılmasında bir ek yük vardır ve bazı denetimli ortamlarda, sistem yeniden başlatıldığında hizmeti otomatik olarak başlatılacak şekilde yapılandırmayı göz önünde bulundurabilirsiniz.

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

Ana pencere için bildirimli olarak ayarlamak için XAML kullanmak yerine, bunu DataContext yönteminde program aracılığıyla ayarlamayı göz önünde OnActivated bulundurabilirsiniz.

Ayrıca bkz.