Ngen.exe (Yerel Görüntü Oluşturucu)

Yerel Görüntü Oluşturucusu (Ngen.exe), yönetilen uygulamaların performansını artıran bir araçtır. Ngen.exe, işlemciye özel derlenmiş makine kodu içeren dosyalar olan yerel görüntüler oluşturur ve bunları yerel bilgisayarın yerel görüntü önbelleğine yükler. Çalışma zamanı orijinal derlemeyi derlemek için anlık (JIT) derleyiciyi kullanmak yerine önbellekteki yerel görüntüleri kullanabilir.

Not

Ngen.exe, yalnızca .NET Framework hedefleyen derlemeler için yerel görüntüleri derler. .NET Core için eşdeğer yerel görüntü Oluşturucu, çapraz genel' tir.

.NET Framework 4 ' te Ngen.exe değişiklikler:

  • Ngen.exe artık derlemeleri tam güven ile derler ve kod erişimi güvenliği (CAS) ilkesi artık değerlendirilmez.

  • Ngen.exe ile oluşturulan yerel görüntüler artık kısmi güvende çalışan uygulamaların içine yüklenemez.

Ngen.exe'ye .NET Framework 2.0 içinde yapılan değişiklikler:

  • Bir derlemeyi yüklemek ayrıca bağımlılıklarını da yükleyerek Ngen.exe'nin sözdizimini basitleştirir.

  • Yerel görüntüler artık uygulama etki alanları arasında paylaşılabilir.

  • Yeni bir eylem, update geçersiz kılınan görüntüleri yeniden oluşturur.

  • Eylemler, görüntüleri oluşturmak ve yüklemek için bilgisayardaki boşta kalma süresini kullanan bir servis tarafından ertelenebilir.

  • Görüntü geçersiz kılmanın bazı nedenleri kaldırıldı.

Windows 8 ' de, yerel görüntü görevi' ne bakın.

Ngen.exe ve yerel görüntü hizmetini kullanma hakkında daha fazla bilgi için bkz. Native Image Service.

Not

.NET Framework 1,0 ve 1,1 sürümleri için Ngen.exe sözdizimi, Yerel Görüntü Oluşturucu (Ngen.exe) eski sözdizimindebulunabilir.

Bu araç, Visual Studio ile birlikte otomatik olarak yüklenir. Aracı çalıştırmak için Visual studio Geliştirici komut istemi veya Visual Studio Geliştirici PowerShellkullanın.

Komut satırına şunu yazın:

Syntax

ngen action [options]
ngen /? | /help

Eylemler

Aşağıdaki tabloda, her birinin sözdizimi gösterilmektedir action . Tek tek bölümlerinin açıklamaları için action bkz. bağımsız değişkenler, Öncelik düzeyleri, senaryolarve yapılandırma tabloları. Seçenekler tablosu options ve yardım anahtarlarını açıklar.

Eylem Açıklama
install [ assemblyName | assemblyPath ] [ scenarios ] [ config ] [ /queue [ : { 1|2|3 }]] Bir derleme ve bağımlılıkları için yerel görüntüler oluştur ve görüntüleri yerel görüntü önbelleğine yükle.

/queueBelirtilmişse, eylem yerel görüntü hizmeti için sıraya alınır. Varsayılan öncelik 3'tür. Öncelik düzeyleri tablosuna bakın.
uninstall [ assemblyName | assemblyPath ] [ scenarios ] [ config ] Bir derleme ve bağımlılıklarının yerel görüntülerini yerel görüntü önbelleğinden sil.

Tek bir görüntüyü ve bağımlılıklarını kaldırmak için, görüntüyü yüklemek için kullanılan aynı komut satırı bağımsız değişkenlerini kullanın. Note: .NET Framework 4 ' te başlayarak, eylem uninstall * artık desteklenmez.
update [/queue] Geçersiz olan yerel görüntüleri güncelleştir.

/queueBelirtilmişse, güncelleştirmeler yerel görüntü hizmeti için sıraya alınır. Güncelleştirmeler her zaman 3 önceliğindedir ve bilgisayar boşta olduğunda çalışır.
display [ assemblyName | assemblyPath ] Bir derleme ve bağımlılıkları için yerel görüntülerin durumunu görüntüle.

Eğer bağımsız değişken sağlanmazsa, yerel görüntü önbelleğindeki her şey görüntülenir.
executeQueuedItems [1|2|3]

-veya-

eqi [1|2|3]
Sıraya alınan derleme işlerini yürüt.

Eğer bir öncelik belirtilirse, ona eşit veya daha büyük önceliğe sahip derleme işleri yürütülür. Eğer öncelik belirtilmezse, sıraya alınan tüm derleme işleri yürütülür.
queue { pause | continue | status } Yerel görüntü hizmetini duraklat, duraklatılan hizmetin devam etmesine izin ver veya hizmetin durumunu sorgula.

Bağımsız değişkenler

Bağımsız Değişken Açıklama
assemblyName Derlemenin tam görünen adı. Örneğin, "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5". Note: myAssemblyVe eylemleri için gibi kısmi bir derleme adı sağlayabilirsiniz display uninstall .

Her Ngen.exe komut satırında yalnızca bir derleme belirtilebilir.
assemblyPath Derlemenin açık yolu. Tam veya göreli bir yol belirtebilirsiniz.

Eğer bir yol belirtmeden dosya adı belirtilseniz, derleme geçerli dizinde bulunmalıdır.

Her Ngen.exe komut satırında yalnızca bir derleme belirtilebilir.

Öncelik Düzeyleri

Öncelik Açıklama
1 Yerel görüntüler, boşta kalma süresi beklenmeden hemen oluşturulur ve yüklenir.
2 Yerel görüntüler boşta kalma süresi beklenmeden, ancak tüm 1 öncelikli eylemler (ve bağımlılıkları) tamamlandıktan sonra yüklenir.
3 Yerel görüntüler, yerel görüntü hizmeti bilgisayarın boşta olduğunu algıladığında yüklenir. Bkz. yerel görüntü hizmeti.

Senaryolar

Senaryo Açıklama
/Debug Bir hata ayıklayıcı altında kullanılabilen yerel görüntüler oluştur.
/Profile Bir profil oluşturucu altında kullanılabilen yerel görüntüler oluştur.
/NoDependencies Belirli senaryo seçeneklerinin gerektirdiği en az sayıda yerel görüntü oluştur.

Config

Yapılandırma Açıklama
/ExeConfig: exePath Belirtilen çalıştırılabilir derlemesinin yapılandırmasını kullan.

Ngen.exe, bağımlılıklara bağlarken yükleyici ile aynı kararları almalıdır. Çalışma zamanında paylaşılan bir bileşen yüklendiğinde, yöntemi kullanılarak, Load uygulamanın yapılandırma dosyası paylaşılan bileşen için yüklenen bağımlılıkları belirler — örneğin, yüklenen bir bağımlılığın sürümü. /ExeConfigAnahtar, çalışma zamanında hangi bağımlılıkların yüklenebileceğine ilişkin Ngen.exe rehberlik sağlar.
/AppBase: directoryPath Bağımlılıkları bulurken, uygulama tabanı olarak belirtilen dizini kullan.

Seçenekler

Seçenek Açıklama
/nologo Microsoft başlangıç başlığını bastır.
/silent Başarı iletilerinin görüntülenmesini bastır.
/verbose Hata ayıklama için ayrıntılı bilgi görüntüle.
/help, /? Geçerli yayın için komut sözdizimi ve seçenekleri görüntüle.

Açıklamalar

Ngen.exe'yi çalıştırabilmek için yönetici ayrıcalıklarınızın olması gerekir.

Dikkat

Ngen.exe'yi tam güvenilir olmayan derlemeler üzerinde çalıştırmayın. .NET Framework 4 ' den başlayarak Ngen.exe, derlemeleri tam güvenle derler ve kod erişim güvenliği (CAS) ilkesi artık değerlendirilmez.

.NET Framework 4 ' te başlayarak, Ngen.exe ile oluşturulan yerel görüntüler artık kısmi güvende çalışan uygulamalara yüklenemez. Bunun yerine anlık (JIT) derleyici çağrılır.

Ngen.exe, assemblyname install eylem ve tüm bağımlılıkları için bağımsız değişken tarafından belirtilen derleme için yerel görüntüler oluşturur. Bağlılıklar derleme bildirisindeki referanslar ile belirlenir. Bağımlılığı ayrı olarak yüklemeniz gereken tek senaryo, uygulamanın yansıma kullanarak bunu yüklemesidir( örneğin yöntemini Assembly.Load çağırarak).

Önemli

yöntemini yerel Assembly.LoadFrom görüntülerle birlikte kullanmayın. Bu metotla yüklenen bir görüntü, yürütme bağlamındaki diğer derlemeler tarafından kullanılamaz.

Ngen.exe bağımlılıklar için bir sayaç tutar. Örneğin, hem hem de yerel görüntü önbelleğinde yüklü olduğunu ve her ikisinin MyAssembly.exe YourAssembly.exe de başvurularını olduğunu OurDependency.dll varsayalım. MyAssembly.exekaldırılırsa OurDependency.dll kaldırılmaz. Yalnızca aynı zamanda YourAssembly.exe kaldırıldığı zaman kaldırılır.

Eğer genel derleme önbelleğindeki bir derleme için doğal görüntü üretiyorsanız, onun görünür ismini belirtiniz. Bkz. Assembly.FullName.

Ngen.exe'nin ürettiği doğal görüntüler uygulama alanı içerisinde paylaşılabilir. Bu, Ngen.exe'yi derlemelerin uygulama etki alanları arasında paylaşılması gerektiği senaryolarda kullanabileceğiniz anlamına gelir. Alan bağımsızlığını belirtmek için:

Birden çok uygulama alanına aynı derleme yüklediğiniz zaman mutlaka alan-bağımsız kod kullanın. Eğer bir doğal görüntü paylaşılmış alana yüklendikten sonra paylaşılmamış alana yüklenirse, görüntü kullanılamaz.

Not

Alan-bağımsız kod yüklemesi geri alınamaz (geri döndürülemez) ve performans, özellikle statik elemanlara erişildiği zaman, çok az daha yavaş olabilir.

Bu Açıklamalar bölümünde:

Farklı senaryolar için görüntü oluşturma

Bir derleme için yerel bir görüntü oluşturduktan sonra, çalışma zamanı derlemeyi her çalıştıracakları zaman otomatik olarak bu yerel görüntüyü bulmaya ve kullanmaya çalışır. Kullanım senaryolarına göre, birden fazla görüntüler oluşturulabilir.

Örneğin, bir derlemeyi bir hata ayıklama veya profil oluşturma senaryosunda çalıştırıyorsanız, çalışma zamanı veya seçenekleriyle oluşturulmuş yerel bir /Debug görüntüyü /Profile ister. Eğer eşleşen bir doğal görüntü bulamazsa, çalışma zamanı standart JIT derlemesine geri döner. Yerel görüntülerde hata ayıklamanın tek yolu seçeneğiyle yerel bir görüntü /Debug oluşturmaktır.

Eylem uninstall senaryoları da tanır, bu nedenle tüm senaryoları veya yalnızca seçili senaryoları kaldırabilirsiniz.

Yerel görüntülerin ne zaman kullanıcalarını belirleme

Yerel görüntüler iki alanda performans iyileştirmesi sağlayabilir: daha iyi bellek kullanımı ve daha az başlangıç zamanı.

Not

Yerel görüntülerin performansı; kod ve veri erişim desenleri, modül sınırları dışına yapılan çağrı sayısı ve diğer uygulamalar tarafından şimdiye kadar yüklenmiş olan bağımlılık sayısı gibi analizi zorlaştıran çeşitli etkenlere bağlıdır. Yerel görüntülerin uygulamanıza yararlı olup olmadığını belirlemenin tek yolu, anahtar dağıtım senaryolarınızda yapacağını dikkatli performans ölçümleridir.

Geliştirilmiş bellek kullanımı

Yerel görüntüler kod işlemler arasında paylaşıldığında bellek kullanımını önemli ölçüde iyileştirebilirler. Yerel görüntüler Windows PE dosyalarıdır, yani bir .dll dosyasının tek kopyası birden çok işlem tarafından paylaşılabilir; buna karşılık, JIT derleyicisi tarafından üretilen yerel kod özel bellekte tutulur ve paylaşılamaz.

Terminal hizmetleri altında çalışan uygulamalar da paylaşılan kod sayfalarından yararlanabilir.

Ek olarak, JIT derleyicisini yüklememek her uygulama örneği için sabit bir miktarda bellek kazandırır.

Daha hızlı uygulama başlatma

Derlemeleri Ngen.exe ile ön derlemek bazı uygulamalar için başlangıç süresini iyileştirebilir. Genel olarak, uygulamalar bileşen derlemelerini paylaştığında kazanç olabilir, çünkü ilk uygulama başladıktan sonra paylaşılan bileşenler sonraki uygulamalar için zaten yüklü olur. Uygulamadaki tüm derlemelerin sabit diskten yüklenmesini gerektiren soğuk başlangıç yerel görüntülerden pek fayda kazanmaz, çünkü sabit disk erişim süresi baskın olur.

Sabit bağlama başlatma süresini etkileyebilir, çünkü ana uygulama derlemesine sabit bağlı olan tüm resimler aynı anda yüklenmelidirler.

Not

.NET Framework 3.5 Hizmet Paketi 1'den önce, yükleyici genel derleme önbelleğinde olmayan güçlü adlandırılmış derlemeler üzerinde ek doğrulama gerçekleştirerek yerel görüntüler kullanılarak kazanılan başlatma süresinde yapılan geliştirmeleri etkili bir şekilde ortadan kaldıran paylaşılan, güçlü adlandırılmış bileşenleri genel derleme önbelleğine koyabilirsiniz. .NET Framework 3.5 SP1'de tanıtılan iyileştirmeler ek doğrulamayı kaldırdı.

Kullanımla ilgili dikkat edilmesi gerekenlerin özeti

Aşağıdaki genel önemli noktalar ve uygulama önemli noktaları uygulamanız için yerel görüntüleri değerlendirmek üzere çaba harcayıp harcamamaya karar vermenize yardımcı olabilir:

  • Yerel görüntüler MSIL'den daha hızlı yüklenir çünkü JIT derlemesi ve tür güvenliği doğrulaması gibi pek çok başlangıç aktivitesine gereksinimi ortadan kaldırırlar.

  • Yerel görüntüler daha küçük ilk çalışma kümesi gerektirirler çünkü JIT derleyicisine gerek yoktur.

  • Yerel görüntüler işlemler arasında kod paylaşımını etkinleştirir.

  • Yerel görüntüler MSIL derlemelerinden daha fazla sabit disk alanı gerektirir ve üretmek için büyük miktarda zaman gerektirebilir.

  • Yerel görüntüler bakılmalıdır.

    • Orijinal derleme veya bağımlılıklarından biri değiştiğinde görüntüler yeniden oluşturulmalıdır.

    • Tek bir derleme farklı uygulamalarda ya da farklı senaryolarda kullanılması için birden çok yerel görüntüye ihtiyaç duyabilir. Örneğin, iki uygulamadaki yapılandırma bilgileri aynı bağımlı derleme için farklı bağlama kararlarına neden olabilir.

    • Yerel görüntüler bir yönetici, yani Yöneticiler grubu içindeki bir Windows hesabı, tarafından üretilmelidir.

Bu genel önemli noktalara ek olarak, yerel görüntülerin bir performans kazancı sağlayıp sağlamayacağını belirlerken uygulamanızın doğası da göz önüne alınmalıdır:

  • Eğer uygulamanız pek çok paylaşılan bileşen kullanan bir ortamda çalışıyorsa, yerel görüntüler bileşenlerin birden çok işlem tarafından paylaşılmasını sağlar.

  • Eğer uygulamanız birden çok uygulama alanı kullanıyorsa, yerel görüntüler alanlar arasında kod sayfalarının paylaşılmasını sağlar.

    Not

    .NET Framework 1.0 ve 1.1 sürümlerinde, yerel görüntüler uygulama etki alanları arasında paylaşılamaz. Bu, sürüm 2.0 ve sonrasında geçerli değildir.

  • Eğer uygulamanız Terminal Server altında çalışacaksa, yerel görüntüler kod sayfalarının paylaşılmasını sağlar.

  • Büyük uygulamalar yerel görüntülere derlemekten genellikle yarar görür. Küçük uygulamalar genellikle yarar görmez.

  • Uzun süre çalışan uygulamalarda, çalışma zamanı JIT derlemesi yerel görüntülerden biraz daha iyi çalışır. (Sabit bağlama bu performans farkını belirli bir ölçüde azaltabilir.)

Derleme temel adreslerinin önemi

Yerel görüntüler Windows PE dosyaları olduğu için, diğer çalıştırılabilir dosyalardaki aynı yeniden temellendirme sorunlarıyla karşılaşırlar. Eğer sıkı bağlama kullanılırsa, yeniden konumlandırmanın performans maliyeti daha da belirgin olur.

Bir yerel görüntü için temel adresi ayarlamak için, derlemenin temel adresini ayarlama amacıyla derleyicinizin uygun seçeneğini kullanın. Ngen.exe yerel görüntü için bu temel adresi kullanır.

Not

Yerel görüntüler, oluşturuldukları yönetilen derlemelerden daha büyüktür. Bu daha büyük boyutlara izin vermek için temel adresler hesaplanmalıdır.

Bir yerel görüntünün tercih edilen temel adresini görüntülemek için dumpbin.exe gibi bir araç kullanabilirsiniz.

Sabit bağlama

Sıkı bağlama doğal görüntüler için birim zamanda yapılan işi artırır ve çalışma seti alanını azaltır. Sıkı bağlamanın dezavantajı, bir derleme yüklendiğinde o derlemeye sıkı bağlı olan tüm görüntülerin de yüklenmesinin gerekmesidir. Bu büyük bir uygulama için başlatma zamanını önemli derecede artırabilir.

Sıkı bağlama, uygulamanızın performansının kritik olduğu senaryolarda yüklenen bağımlılıklar için uygundur. Herhangi bir doğal görüntü kullanımında, sıkı bağlanmanın uygulamanızın performansını arttırıp arttırmadığını öğrenmenin tek yolu dikkatli(hassas) performans ölçümleridir.

ve DependencyAttribute DefaultDependencyAttribute öznitelikleri, bağlayıcılara sabit bağlama ipuçları Ngen.exe.

Not

Bu değerler Ngen.exe'ye teknik/tavsiyelerdir, komutlar değillerdir. Bunları kullanmak sıkı bağlamayı garanti etmez. Bu değerlerin anlamları ileri yayınlarda değişebilir.

Bağımlılık için bağlama ipucu belirtme

Belirtilen DependencyAttribute bağımlılığın yüklenme olasılığını göstermek için bir derlemeye uygulama. LoadHint.Always , sabit bağlamanın uygun olduğunu gösterir, bağımlılık için varsayılan değerin kullanılmalıdır ve sabit Default Sometimes bağlamanın uygun olmadığını gösterir.

Aşağıdaki kod, iki bağlılığı olan bir derlemenin özniteliklerini gösterir. İlk bağımlılık (Assembly1) sıkı bağlama için uygun bir adaydır ve ikinci bağımlılık (Assembly2) değildir.

Imports System.Runtime.CompilerServices
<Assembly:DependencyAttribute("Assembly1", LoadHint.Always)>
<Assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)>
using System.Runtime.CompilerServices;
[assembly:DependencyAttribute("Assembly1", LoadHint.Always)]
[assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)]
using namespace System::Runtime::CompilerServices;
[assembly:DependencyAttribute("Assembly1", LoadHint.Always)];
[assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)];

Derleme ismi dosya ismi uzantısını içermez. Görünür isim kullanılabilir.

Derleme için varsayılan bağlama ipucu belirtme

Varsayılan bağlama ipuçları, yalnızca onlara bağlılığı olan herhangi bir uygulama tarafından anında ve sıkça kullanılacak olan derlemeler için gereklidir. DefaultDependencyAttribute LoadHint.Always Sabit bağlamanın kullanılması gerektiğini belirtmek için ile ilgili bütünleştirilmiş kodlara uygulayın.

Not

DefaultDependencyAttributeBu kategoriye uymayan .dll derlemeler için geçerli değildir çünkü özniteliği, dışında bir değer ile uygulamak, LoadHint.Always özniteliği hiçbir şekilde uygulamakla aynı etkiye sahiptir.

Microsoft, DefaultDependencyAttribute .NET Framework mscorlib.dll gibi çok az sayıda derleme için varsayılan değer olan sabit bağlamanın varsayılan olduğunu belirtmek için öğesini kullanır.

Ertelenmiş işleme

Çok büyük bir uygulama için yerel görüntü oluşturmak uzun bir süre alabilir. Benzer şekilde, paylaşılan bir bileşene veya bilgisayar seçeneklerine yapılan değişiklikler pek çok yerel görüntünün güncellenmesini gerektirebilir. installVe update eylemleri, /queue yerel görüntü hizmeti tarafından ertelenmiş yürütme işlemini sıraya alan bir seçeneğe sahiptir. Ayrıca, Ngen.exe, queue ve executeQueuedItems hizmet üzerinde bazı denetimler sağlayan eylemlerdir. Daha fazla bilgi için bkz. yerel görüntü hizmeti.

Yerel görüntüler ve JıT derlemesi

Eğer Ngen.exe assembly içerisinde oluşturamayacağı herhangi bir metotla karşılaşırsa, onları doğal görüntü (özgün görüntü) içerisine dahil etmez. Çalışma zamanı bu derlemeyi çalıştırdığı zaman, doğal görüntünün içerisine dahil edilmeyen metotlar için JIT derleme işlemine döner

Ek olarak, derleme yükseltildiyse veya görüntü herhangi bir sebeple geçersiz kılındıysa yerel görüntüler kullanılmaz.

Geçersiz görüntüler

Ngen.exe'yi bir derlemenin yerel görüntüsünü oluşturmak için kullandığınızda; çıktı, belirlediğin komut satırı seçeneklerine ve bilgisayarınızdaki belirli ayarlara bağlıdır. Bu ayarlar aşağıdakileri içerir:

  • .NET Framework sürümü.

  • Derlemenin tam kimliği (yeniden derleme kimliği değiştirir).

  • Derlemenin başvurduğu tüm derlemelerin tam kimliği (yeniden derleme kimliği değiştirir).

  • Güvenlik etkenleri.

Ngen.exe bir doğal görüntü oluşturduğu zaman bu bilgiyi kaydeder. Bir derlemeyi çalıştırdığınız zaman, çalışma zamanı bilgisayarın o anki çevresine uyan seçenekler ve ayarlarla oluşturulmuş olan doğal görüntüyü arar. Çalışma zamanı eğer eşleşen bir doğal görüntü bulamazsa, derlemeyi JIT ile derleme yoluna gider. Bilgisayarın ayarlarına ve çevresine uygulanan aşağıdaki değişiklikler doğal görüntünün geçersiz olmasına sebep olur:

  • .NET Framework sürümü.

    .NET Framework bir güncelleştirme uygularsanız, Ngen.exe kullanarak oluşturduğunuz tüm yerel görüntüler geçersiz olur. Bu nedenle, tüm Ngen Update yerel görüntülerin yeniden üretildiğinden emin olmak için .NET Framework tüm güncelleştirmeleri komutu yürütür. .NET Framework, yüklediği .NET Framework kitaplıkları için otomatik olarak yeni yerel görüntüler oluşturur.

  • Derlemenin kesin kimliği.

    Eğer derlemeyi yeniden derlerseniz, derlemeye karşılık gelen doğal görüntü geçersiz olur.

  • Derlemenin referans ettiği bütün derlemelerin tam kimliği.

    Eğer yönetilmiş bir derlemeyi güncellerseniz, o derlemeye direk ya da dolaylı yoldan bağlı olan bütün doğal görüntüler geçersiz olur ve yeniden oluşturulması gerekir. Bu hem normal tercihleri/ayarları hem de sıkı-bağlama bağlılıklarını içerir. Her bir yazılım güncelleştirmesi uygulandığında, yükleme programının Ngen Update tüm bağımlı yerel görüntülerin yeniden oluşturulmasını sağlamak için bir komut yürütmesi gerekir.

  • Güvenlik etkenleri.

    Önceden yetkilendirilmiş bir derlemenin izinlerini kısıtlamak için makina güvenlik politikasında değişiklik yapmak, o derleme için önceden derlenmiş olan doğal imajın geçersiz olmasına sebep olabilir

    Ortak dil çalışma zamanının kod erişim güvenliğini nasıl yönettiği ve izinlerin nasıl kullanılacağı hakkında ayrıntılı bilgi için bkz. kod erişim güvenliği.

Sorun giderme

Aşağıdaki sorun giderme konuları, hangi yerel görüntülerin kullanıldığını ve uygulamanız tarafından kullanılamayacağını görmenizi, JıT derleyicisinin bir yöntemi derlemeye ne zaman başlayacağını belirlemenizi ve belirtilen yöntemlerin yerel görüntü derlemesini nasıl devre dışı yapılacağını görmenizi sağlar.

Derleme Bağlaması Günlük Görüntüleyici

Yerel görüntülerin uygulamanız tarafından kullanıldığını onaylamak için Fuslogvw.exe (derleme bağlama günlük Görüntüleyici)kullanabilirsiniz. Bağlama günlüğü Görüntüleyicisi penceresindeki günlük kategorileri kutusunda Yerel görüntüler ' i seçin. Fuslogvw.exe bir doğal imajın neden reddedildiği hakkında bilgi sağlar.

Jıtcompilationstart yönetilen hata ayıklama Yardımcısı

JıT derleyicisinin bir işlevi derlemeye ne zaman başlayacağını anlamak için, Jıtcompilationstart Managed hata ayıklama Yardımcısı 'Nı (MDA) kullanabilirsiniz.

Yerel görüntü oluşturmayı geri alma

Bazı durumlarda, NGen.exe belirli bir yöntem için yerel görüntü üretmekte güçlük açabilir veya metodun yerel bir görüntüye derlenmek yerine JıT olarak derlenmesine de tercih edebilirsiniz. Bu durumda, System.Runtime.BypassNGenAttribute NGen.exe belirli bir yöntem için yerel görüntü oluşturmasını engellemek için özniteliğini kullanabilirsiniz. Özniteliği, kodu yerel görüntüye eklemek istemediğiniz her bir yönteme ayrı ayrı uygulanmalıdır. NGen.exe özniteliği tanır ve ilgili yöntem için yerel görüntüde kod oluşturmaz.

Ancak, BypassNGenAttribute .NET Framework sınıf kitaplığındaki bir tür olarak tanımlanmayan Not. Kodunuzda özniteliği tüketmek için, önce bunu aşağıdaki gibi tanımlamanız gerekir:

namespace System.Runtime
{
   [AttributeUsage(AttributeTargets.Method |
                   AttributeTargets.Constructor |
                   AttributeTargets.Property)]
   public class BypassNGenAttribute : Attribute
   {
   }
}
Namespace System.Runtime
    <AttributeUsage(AttributeTargets.Method Or
                    AttributeTargets.Constructor Or
                    AttributeTargets.Property)>
    Public Class BypassNGenAttribute : Inherits Attribute
    End Class
End Namespace

Sonra özniteliği yöntem başına temelinde uygulayabilirsiniz. Aşağıdaki örnek, yerel görüntü oluşturucuya yöntemi için yerel görüntü oluşturmaması gerektiğini söyler ExampleClass.ToJITCompile .

using System;
using System.Runtime;

public class ExampleClass
{
   [BypassNGen]
   public void ToJITCompile()
   {
   }
}
Imports System.Runtime

Public Class ExampleClass
    <BypassNGen>
    Public Sub ToJITCompile()
    End Sub
End Class

Örnekler

Aşağıdaki komut, geçerli dizinde bulunan için yerel bir görüntü oluşturur ClientApp.exe ve görüntüyü yerel görüntü önbelleğine yüklenir. Derleme için bir yapılandırma dosyası varsa, onu Ngen.exe kullanır. Ayrıca, yerel görüntüler, başvuruda bulunan tüm .dll dosyaları için oluşturulur ClientApp.exe .

ngen install ClientApp.exe

Ngen.exe ile yüklenmiş bir resim, bir kök olarak da adlandırılır. Kök, bir uygulama veya paylaşılan bir bileşen olabilir.

Aşağıdaki komut, belirtilen yol ile için yerel bir görüntü oluşturur MyAssembly.exe .

ngen install c:\myfiles\MyAssembly.exe

Derlemeler ve bağımlılıklarını belirlerken Ngen.exe ortak dil çalışma zamanı tarafından kullanılan aynı algılama mantığını kullanır. Varsayılan olarak, içeren dizin, ClientApp.exe uygulama temel dizini olarak kullanılır ve tüm derleme yoklama bu dizinde başlar. Seçeneğini kullanarak bu davranışı geçersiz kılabilirsiniz /AppBase .

Not

Bu, uygulama temel dizininin geçerli dizin olarak ayarlandığı .NET Framework 1.0 ve 1.1 sürümlerindeki Ngen.exe davranışından farklıdır.

Bir derlemeye başvuru olmadan bağımlılık olabilir, örneğin, yöntemini kullanarak bir .dll dosyası yüklerse Assembly.Load . Bu tür bir .dll dosyası için, seçeneğiyle uygulama derlemesinin yapılandırma bilgilerini kullanarak yerel görüntü oluşturabilirsiniz /ExeConfig . Aşağıdaki komut, ' MyLib.dll, den yapılandırma bilgilerini kullanmak için yerel bir görüntü oluşturur MyApp.exe .

ngen install c:\myfiles\MyLib.dll /ExeConfig:c:\myapps\MyApp.exe

Uygulamayı kaldırdığınızda, bu şekilde yüklenen derlemeler kaldırılmaz.

Bir bağımlılık kaldırmak için yüklemek için kullanılan aynı komut satırı seçeneklerini kullanın. Aşağıdaki komut, MyLib.dll önceki örnekteki öğesini kaldırır.

ngen uninstall c:\myfiles\MyLib.dll /ExeConfig:c:\myapps\MyApp.exe

Genel bütünleştirilmiş kod önbelleğindeki bir derleme için yerel görüntü oluşturmak için, derlemenin görünen adını kullanın. Örneğin:

ngen install "ClientApp, Version=1.0.0.0, Culture=neutral,
  PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL"

NGen.exe yüklediğiniz her senaryo için ayrı bir görüntü kümesi oluşturur. Örneğin, aşağıdaki komutlar normal işlemler için tamamen yerel görüntü kümesi, hata ayıklama için farklı bir küme ve belirleme için üçüncüyü yükler:

ngen install MyApp.exe
ngen install MyApp.exe /debug
ngen install MyApp.exe /profile

Yerel Görüntü Önbelleğini Görüntüleme

Yerel görüntüler önbelleğe yüklendikten sonra, Ngen.exe kullanılarak görüntülenebilirler. Aşağıdaki komut yerel görüntü belleğindeki tüm yerel görüntüleri görüntüler.

ngen display

displayEylem önce tüm kök derlemeleri, ardından bilgisayardaki tüm yerel görüntülerin listesini listeler.

Yalnızca bir derlemenin bilgilerini görüntülemek için o derlemenin basit adını kullanın. Aşağıdaki komut, yerel görüntü önbelleğindeki tüm yerel görüntüleri, kısmen adı MyAssembly , bağımlılıklarıyla ve bağımlılığı olan tüm köklerle eşleşen bir şekilde görüntüler MyAssembly :

ngen display MyAssembly

Paylaşılan bileşen derlemesine hangi köklerin bağımlı olduğunu bilmek, update paylaşılan bileşen yükseltildikten sonra bir eylemin etkisinin ölçmek içinde yararlı olur.

Eğer bir derlemenin dosya uzantısını belirtirseniz, ya yolu belirtmeniz ya da Ngen.exe'yi derlemeyi içeren dizinden yürütmeniz gerekir:

ngen display c:\myApps\MyAssembly.exe

Aşağıdaki komut yerel görüntü önbelleğindeki tüm yerel görüntüleri, ad MyAssembly ve sürüm 1.0.0.0 ile görüntüler.

ngen display "myAssembly, version=1.0.0.0"

Görüntüleri Güncelleştirme

Görüntüler genellikle paylaşılan bir bileşen yükseltildikten sonra güncelleştirilir. Değiştirilen veya bağımlılıkları değişmiş olan tüm yerel görüntüleri güncelleştirmek için, bu update eylemi bağımsız değişken olmadan kullanın.

ngen update

Tüm görüntüleri güncelleştirmek uzun süren bir işlem olabilir. Seçeneğini kullanarak, yerel görüntü hizmeti tarafından yürütme için güncelleştirmeleri sıraya alabilirsiniz /queue . Seçenek ve yükleme öncelikleri hakkında daha fazla bilgi için /queue bkz. Native Image Service.

ngen update /queue

Görüntüleri Kaldırma

Ngen.exe bağımlılıkların bir listesini tutar, yani paylaşılan bileşenler yalnızca onlara bağlı olan tüm derlemeler kaldırıldığında kaldırılır. Ek olarak kök olarak yüklenmiş ortak bileşenler silinmez.

Aşağıdaki komut, kök için tüm senaryoları kaldırır ClientApp.exe :

ngen uninstall ClientApp

uninstallEylem, belirli senaryoları kaldırmak için kullanılabilir. Aşağıdaki komut için tüm hata ayıklama senaryolarını ClientApp.exe kaldırır:

ngen uninstall ClientApp /debug

Not

Kaldırma /debug senaryoları hem hem de içeren bir senaryoyu /profile kaldırmaz /debug.

Aşağıdaki komut, belirli bir sürümü için tüm senaryoları ClientApp.exe kaldırır:

ngen uninstall "ClientApp, Version=1.0.0.0"

Aşağıdaki komutlar, o derleme için "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL", tüm senaryoları veya yalnızca hata ayıklama senaryosunu kaldırır:

ngen uninstall "ClientApp, Version=1.0.0.0, Culture=neutral,
  PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL"
ngen uninstall "ClientApp, Version=1.0.0.0, Culture=neutral,
  PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL" /debug

Eylemde olduğu gibi, bir uzantı sağlamak için derlemeyi Ngen.exe dizininden bir uzantının yürütülmesi install veya tam yol belirterek yürütülmesi gerekir.

Yerel görüntü hizmetiyle ilgili örnekler için bkz. Yerel Görüntü Hizmeti.

Yerel Görüntü Görevi

Yerel görüntü görevi, yerel görüntüler oluşturan ve bakımını yapılan bir Windows görevidir. Yerel görüntü görevi, desteklenen senaryolar için yerel görüntüleri otomatik olarak üretir ve geri üretir. Ayrıca yükleyicilerin yerel görüntüleri ertelenmişNgen.exe oluşturmak ve güncelleştirmek içinNgen.exe (Yerel Görüntü Oluşturucu) kullanmalarını sağlar.

Yerel görüntü görevi, her bir mimariyi hedef alan uygulamalar için derlemeye izin vermek için bir bilgisayarda desteklenen her CPU mimarisi için bir kez kaydedilir:

Görev adı 32 bit bilgisayar 64 bit bilgisayar
NET Framework NGEN v4.0.30319 Yes Yes
NET Framework NGEN v4.0.30319 64 Hayır Yes

Yerel görüntü görevi, .NET Framework veya sonraki sürümlerde çalıştırıldıklarında 4.5 ve Windows 8 kullanılabilir. Windows'un önceki sürümlerinde, .NET Framework Yerel Görüntü Hizmeti kullanır.

Görev Ömrü

Genel olarak, Windows Görev Zamanlayıcı bilgisayar boştayken yerel görüntü görevini her gece başlatır. Görev, uygulama yükleyicileri tarafından kuyruğa alınan ertelenen tüm çalışmaları, ertelenen yerel görüntü güncelleştirme isteklerini ve tüm otomatik görüntü oluşturma isteklerini denetler. Görev bekleyen iş öğelerini tamamlar ve sonra kapatır. Görev çalışırken bilgisayar boşta durmayı durdurursa, görev durur.

Yerel görüntü görevini, Görev Zamanlayıcı kullanıcı arabirimi aracılığıyla veya NGen.exe. Görev bu yöntemlerden biri aracılığıyla başlatılsa, bilgisayar artık boşta kalmadan çalışmaya devam eder. Uygulama yükleyicileri için tahmin edilebilir NGen.exe sağlamak için el ile oluşturulan görüntülere öncelik ve oluşturulur.

Yerel Görüntü Hizmeti

Yerel görüntü hizmeti, yerel görüntüler oluşturan ve bakımını yapılan bir Windows hizmetidir. Yerel görüntü hizmeti, geliştiricinin yerel görüntülerin yüklemesini ve güncelleştirmesini bilgisayarın boşta olduğu dönemlere ertelemesini sağlar.

Normalde, yerel görüntü hizmeti bir uygulama veya güncelleştirme için yükleme programı (yükleyici) tarafından başlatılır. Öncelik 3 eylemleri için hizmet, bilgisayarda boşta kalma süresi sırasında yürütülür. Hizmet durumunu kaydeder ve gerekirse birden çok yeniden başlatma işlemiyle devam ettirebilecektir. Birden çok görüntü derlemesi kuyruğa olabilir.

Hizmet ayrıca el ile komutla Ngen.exe. El ile yapılan komutlar arka plan etkinliğine göre önceliklidir.

Not

Windows Vista'da, yerel görüntü hizmeti için görüntülenen ad "Microsoft.NET Framework NGEN v2.0.50727_X86" veya "Microsoft.NET Framework NGEN v2.0.50727_X64". Microsoft Windows'un tüm önceki sürümlerinde ad ".NET Çalışma Zamanı İyileştirme Hizmeti v2.0.50727_X86" veya ".NET Çalışma Zamanı İyileştirme Hizmeti v2.0.50727_X64".

Ertelenmiş İşlemleri Başlatma

Bir yükleme veya yükseltmeye başlamadan önce hizmeti duraklatmanızı öneririz. Bu, yükleyici dosyaları kopyalayıp derlemeleri genel derleme önbelleğine alırken hizmetin yürütülmesini sağlar. Aşağıdaki Ngen.exe komut satırı hizmeti duraklatıyor:

ngen queue pause

Ertelenen tüm işlemler kuyruğa alındıklarında, aşağıdaki komut hizmetin sürdürmesi için izin verir:

ngen queue continue

Yeni bir uygulama yüklerken veya paylaşılan bir bileşeni güncelleştiriyorsanız yerel görüntü oluşturmayı ertelemek için veya /queue eylemleriyle install seçeneğini update kullanın. Aşağıdaki komut Ngen.exe paylaşılan bileşen için yerel bir görüntü yükleyen ve etkilenen tüm kökleri güncelleştiren bir güncelleştirme gerçekleştirmektedir:

ngen install MyComponent /queue
ngen update /queue

Eylemi update yalnızca kullananları değil, geçersiz kılınan tüm yerel görüntüleri yeniden MyComponent üreter.

Uygulamanız birçok kökden oluşursa ertelenen eylemlerin önceliğini kontrol edersiniz. Aşağıdaki komutlar üç kök yüklemesini kuyruğa alar. Assembly1 , boşta kalma süresini beklemeden önce yüklenir. Assembly2 , boşta kalma süresini beklemeden, ancak tüm öncelik 1 eylemleri tamamlandıktan sonra da yüklenir. Assembly3 , hizmet bilgisayarın boşta olduğunu algılasa yüklenir.

ngen install Assembly1 /queue:1
ngen install Assembly2 /queue:2
ngen install Assembly3 /queue:3

Eylem kullanarak kuyruğa alınan eylemleri zaman uyumlu olarak gerçekleşmesini executeQueuedItems zorabilirsiniz. İsteğe bağlı önceliği sağlarsanız, bu eylem yalnızca eşit veya daha düşük önceliğe sahip kuyruğa alınan eylemleri etkiler. Varsayılan öncelik 3'tür, bu Ngen.exe aşağıdaki komut kuyruğa alınan tüm eylemleri hemen işler ve tamam olana kadar geri dönmez:

ngen executeQueuedItems

Zaman uyumlu komutlar Ngen.exe yürütülür ve yerel görüntü hizmetini kullanmaz. Yerel görüntü hizmeti çalışırken Ngen.exe kullanarak eylemleri yürütebilirsiniz.

Hizmet Kapatma

seçeneğini içeren bir Ngen.exe komutu çalıştırarak başlatıldıktan sonra, tüm eylemler tamamlanana kadar /queue hizmet arka planda çalışır. Hizmet, gerekirse birden çok yeniden başlatma işlemiyle devam etmek için durumunu kaydeder. Hizmet kuyruğa alınan başka eylem olmadığını algılayınca, bilgisayarın bir sonraki önyüklemede yeniden başlatılmayacak şekilde durumunu sıfırlar ve ardından kendisini kapatır.

İstemcilerle Hizmet Etkileşimi

2.0 .NET Framework sürümünde, yerel görüntü hizmetiyle tek etkileşim komut satırı aracı aracı Ngen.exe. Yerel görüntü hizmetinin eylemlerini kuyruğa alan ve hizmetle etkileşim kurmak için yükleme betiklerinde komut satırı aracını kullanın.

Ayrıca bkz.