2009-03-08 27 views
1

.NET üzerinde çalışmak, uygulamanın kendiliğinden genel olarak iyi bir performans göstermesini sağlıyor ancak uygulama için ilk yükleme süreleri oldukça büyük. Birçoğu, ölçülmesi zor olan yükleme takımlarına doğru gidiyor..NET Uygulama Yükleme Optimizasyonları

Montajlarım için GAC veya Ngen içermeden daha hızlı yükleme yapmak için ClickOnce için kullanılamayan optimizasyonlar var mı?

Bu bir WinForms 2.0 projesidir. Bunu bir 3.5'e yükseltebilirim, ancak bu limit kullanıcı tabanım. Makinemde .NET Framework 3.5 yüklü var.

cevap

2

Çok kısa bir açılış ekranı gösteren en küçük bir .exe oluşturdum. Bundan sonra herşeyi başlatacağım.

JIT derleyici, takılı olan yöntemden çağrılan modülleri yükler. Bu yüzden, açılış ekranını gösteren yöntemin, henüz yüklenmesini istemediğiniz modüllerdeki yöntemleri çağırmamasına dikkat etmelisiniz.

Örnek:

internal sealed class Startup { 

    // Call Startup.Run() from Program.Main to start the application 
    internal void Run() { 
     this.ShowSplash(); 
     this.ContinueStartup(); 
    } 

    private void ShowSplash() { 
     _splash = new Splash(); 
     _splash.Show(); 
     Application.DoEvents(); 
    } 

    [MethodImpl(MethodImplOptions.NoInlining)] 
    private void ContinueStartup() { 
     // Do the startup here 
    } 
} 

[MethodImpl (MethodImplOptions.NoInlining)] o modülleri çok erken yüklenmesine neden olacaktır çünkü ContinueStartup() yöntemi, tam zamanında üretim ile inlined almaz böylece ihtiyaç vardır

.

+0

GvS, bunun nasıl yapılacağı hakkında bazı örneklerle bağlantılarınız var mı? –

+0

Bu oldukça tatlı görünüyor. Ama süslü bir sıçrama ekranı aradığım şey değil. Kullanıcılar hemen programı kullanmaya başlamak istiyor ve bir açılış ekranının algısı çok fazla yardımcı olmayacak. –

+0

Biliyorum, ama bu benim için çalışan en iyi şey. Kullanıcıya her şeyin yüklendiğini bildirmek, kullanıcının geri bildirim olmadan beklemesine izin vermek kadar iyidir. Eğer kullanıcı çok uzun süre beklemek zorunda kalıyorsa uygulamayı tekrar başlatır ve başlangıç ​​süreleri daha da artar. – GvS

1

Tüm montajlarınızı tek bir dosyada birleştirmek için ILMerge kullanabilirsiniz. Bir dosyayı belleğe okumak daha hızlıdır ve 10 dosya okunmaktadır. Şüphem olsa da, orada yük hızında gerçek iyileşme göreceksiniz.

Ayrıca, tüm başvuruları diğer derlemelere kaldırabilir, kullanıcı arabirimini ui'ye yükleyebilir ve Kullanıcı Arabirimini (yazarak veya başka bir şey) kullanırken Assembly.Load kullanarak tüm gerekli derlemeleri önceden yükleyebilirsiniz, gerekli tüm işlev işaretlerini alın. yansıma kullanarak bunları iç üyelerde saklayın. Bu şekilde uygulama çok daha hızlı yüklenir. Ama sanırım aklı başında kimse böyle bir optimizasyon yapacak.

0

Kaç tane derlemeniz olduğunu anlatabilir misiniz?

.NET, derlemeyi gerektiğinde anında yükler. Uygulamanızı çeşitli meclislerde bölmeye karar verebilirsiniz. Montajlar şu şekilde dağıtılmalıdır: dağıtım stratejisi, güvenlik ve performans. Çoğu uygulama 3 katmanlı yapıya (UI, iş, veri) bölünür.

İlgili konular