NGen ile başlangıç performansını iyileştirme

Dekont

Yalnızca EF6'ya Doğru - Bu sayfada ele alınan özellikler, API'ler vb. Entity Framework 6'da sunulmuştur. Önceki bir sürümü kullanıyorsanız, bilgilerin bir kısmı veya tümü geçerli değildir.

.NET Framework, uygulamaların daha hızlı başlamasına ve bazı durumlarda daha az bellek kullanmasına yardımcı olmak için yönetilen uygulamalar ve kitaplıklar için yerel görüntülerin oluşturulmasını destekler. Yerel görüntüler, yönetilen kod derlemeleri uygulama yürütülmeden önce yerel makine yönergeleri içeren dosyalara çevrilerek oluşturulur ve .NET JIT (Tam Zamanında) derleyicisinin uygulama çalışma zamanında yerel yönergeleri oluşturması gerekmez.

6. sürümden önce EF çalışma zamanının çekirdek kitaplıkları .NET Framework'ün bir parçasıydı ve bunlar için otomatik olarak yerel görüntüler oluşturuldu. Sürüm 6'dan başlayarak TÜM EF çalışma zamanı EntityFramework NuGet paketinde birleştirildi. Benzer sonuçlar elde etmek için NGen.exe komut satırı aracı kullanılarak yerel görüntülerin oluşturulması gerekir.

Ampirik gözlemler, EF çalışma zamanı derlemelerinin yerel görüntülerinin uygulama başlangıç süresinin 1 ile 3 saniye arasında kesildiğini gösterir.

NGen.exe'yi kullanma

NGen.exe aracının en temel işlevi, derleme ve tüm doğrudan bağımlılıkları için yerel görüntüleri "yüklemek" (disk oluşturmak ve diskte kalıcı hale getirmek için) kullanmaktır. Bunu şu şekilde başarabilirsiniz:

  1. Yönetici olarak bir Komut İstemi penceresi açın.

  2. Geçerli çalışma dizinini, yerel görüntüler oluşturmak istediğiniz derlemelerin konumuyla değiştirin:

    cd <*Assemblies location*>  
    
  3. İşletim sisteminize ve uygulamanın yapılandırmasına bağlı olarak 32 bit mimari, 64 bit mimari veya her ikisi için yerel görüntüler oluşturmanız gerekebilir.

    32 bit çalıştırma için:

    %WINDIR%\Microsoft.NET\Framework\v4.0.30319\ngen install <Assembly name>  
    

    64 bit çalıştırma için:

    %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ngen install <Assembly name>  
    

Bahşiş

Yanlış mimari için yerel görüntüler oluşturmak çok yaygın bir hatadır. Şüpheniz varsa, makinede yüklü işletim sistemine uygulanan tüm mimariler için yerel görüntüler oluşturabilirsiniz.

NGen.exe ayrıca yüklü yerel görüntüleri kaldırma ve görüntüleme, birden çok görüntü oluşturma işlemini kuyruğa alma gibi diğer işlevleri de destekler. Kullanımın diğer ayrıntıları için NGen.exe belgelerini okuyun.

NGen.exe ne zaman kullanılır?

EF sürüm 6 veya üzerini temel alan bir uygulamada hangi derlemeler için yerel görüntü oluşturulacağı konusunda aşağıdaki seçenekleri göz önünde bulundurmanız gerekir:

  • Ana EF çalışma zamanı derlemesi EntityFramework.dll: Tipik bir EF tabanlı uygulama, başlangıçta veya veritabanına ilk erişiminde bu derlemeden önemli miktarda kod yürütür. Sonuç olarak, bu derlemenin yerel görüntülerini oluşturmak, başlangıç performansında en büyük kazanımları oluşturur.
  • Uygulamanız tarafından kullanılan herhangi bir EF sağlayıcı derlemesi: Başlangıç süresi, bunların yerel görüntülerinin oluşturulmasından da biraz yararlanabilir. Örneğin, uygulama SQL Server için EF sağlayıcısını kullanıyorsa EntityFramework.SqlServer.dll için yerel bir görüntü oluşturmak istersiniz.
  • Uygulamanızın derlemeleri ve diğer bağımlılıkları: NGen.exe belgeleri , yerel görüntülerin oluşturulacağı derlemeleri ve yerel görüntülerin güvenlik üzerindeki etkisini seçmeye yönelik genel ölçütleri, "sabit bağlama" gibi gelişmiş seçenekleri, hata ayıklama ve profil oluşturma senaryolarında yerel görüntüleri kullanma gibi senaryoları kapsar.

Bahşiş

Yerel görüntüleri kullanmanın hem başlangıç performansı hem de uygulamanızın genel performansı üzerindeki etkisini dikkatle ölçtünüzden ve bunları gerçek gereksinimlerle karşılaştırdığınızdan emin olun. Yerel görüntüler genellikle başlatma performansını artırmaya ve bazı durumlarda bellek kullanımını azaltmaya yardımcı olsa da, tüm senaryolar eşit fayda sağlamaz. Örneğin, JIT derleyicisi tarafından oluşturulan kararlı durum yürütmesinde (uygulama tarafından kullanılan tüm yöntemler en az bir kez çağrıldıktan sonra) kod aslında yerel görüntülerden biraz daha iyi performans verebilir.

Geliştirme makinesinde NGen.exe kullanma

Geliştirme sırasında .NET JIT derleyicisi, sık değişen kod için en iyi genel dengeyi sunar. EF çalışma zamanı derlemeleri gibi derlenmiş bağımlılıklar için yerel görüntüler oluşturmak, her yürütmenin başında birkaç saniyeyi keserek geliştirme ve testi hızlandırmaya yardımcı olabilir.

EF çalışma zamanı derlemelerini bulmak için iyi bir yer, çözüm için NuGet paket konumudur. Örneğin, SQL Server ile EF 6.0.2 kullanan ve .NET 4.5 veya üzerini hedefleyen bir uygulama için Komut İstemi penceresine aşağıdakileri yazabilirsiniz (yönetici olarak açmayı unutmayın):

cd <Solution directory>\packages\EntityFramework.6.0.2\lib\net45
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\ngen install EntityFramework.SqlServer.dll
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ngen install EntityFramework.SqlServer.dll

Dekont

Bu, SQL Server için EF sağlayıcısı için yerel görüntülerin yüklenmesinin varsayılan olarak ana EF çalışma zamanı derlemesi için yerel görüntüleri de yükleyeceği gerçeğinden yararlanır. NGen.exe, EntityFramework.dll dosyasının aynı dizinde bulunan EntityFramework.SqlServer.dll derlemesinin doğrudan bağımlılığı olduğunu algılayabildiğinden bu işe yarar.

Kurulum sırasında yerel görüntüler oluşturma

WiX Toolkit, bu nasıl yapılır kılavuzunda açıklandığı gibi kurulum sırasında yönetilen derlemeler için yerel görüntülerin oluşturulmasını kuyruğa almayı destekler. Bir diğer alternatif de NGen.exe komutunu yürüten özel bir kurulum görevi oluşturmaktır.

EF için yerel görüntülerin kullanıldığını doğrulama

".ni.dll" veya ".ni.exe" uzantısına sahip yüklü derlemeleri arayarak belirli bir uygulamanın yerel derleme kullandığını doğrulayabilirsiniz. Örneğin, EF'nin ana çalışma zamanı derlemesi için yerel görüntü EntityFramework.ni.dll olarak adlandırılır. Bir işlemin yüklenen .NET derlemelerini incelemenin kolay bir yolu, İşlem Gezgini'ni kullanmaktır.

Dikkat edilmesi gereken diğer şeyler

Derlemenin yerel görüntüsünün oluşturulması, derlemenin GAC'ye (Genel Bütünleştirilmiş Kod Önbelleği) kaydedilmesiyle karıştırılmamalıdır. NGen.exe, GAC'de olmayan derlemelerin görüntülerinin oluşturulmasına olanak tanır ve aslında EF'nin belirli bir sürümünü kullanan birden çok uygulama aynı yerel görüntüyü paylaşabilir. Windows 8, GAC'ye yerleştirilen derlemeler için otomatik olarak yerel görüntüler oluşturabilir, ancak EF çalışma zamanı uygulamanızla birlikte dağıtılacak şekilde iyileştirilmiştir ve bunun derleme çözünürlüğü ve uygulamalarınıza diğer yönleriyle hizmet verme üzerinde olumsuz bir etkisi olduğundan, bunu GAC'ye kaydetmenizi önermeyiz.