Aracılığıyla paylaş


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'i hedefleyen derlemeler için yerel görüntüleri derler. .NET Core için eşdeğer yerel görüntü oluşturucu CrossGen'dir.

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

  • 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 olan update, geçersiz kılınmış 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 bkz . Yerel Görüntü Görevi.

Ngen.exe ve yerel görüntü hizmetini kullanma hakkında ek bilgi için bkz . Yerel Görüntü Hizmeti.

Not

.NET Framework'ün 1.0 ve 1.1 sürümleri için Ngen.exe söz dizimi Yerel Görüntü Oluşturucu (Ngen.exe) Eski Söz Dizimi'nde bulunabilir.

Bu araç, Visual Studio ile birlikte otomatik olarak yüklenir. Aracı çalıştırmak için Visual Studio Geliştirici Komut İstemi'ni veya Visual Studio Geliştirici PowerShell'i kullanın.

Komut istemine şunu yazın:

Sözdizimi

ngen action [options]
ngen /? | /help

Eylemler

Aşağıdaki tabloda her actionbirinin söz dizimi gösterilmektedir. bir actionöğesinin tek tek bölümlerinin açıklamaları için bkz . Bağımsız Değişkenler, Öncelik Düzeyleri, Senaryolar ve Yapılandırma tabloları. Seçenekler tablosunda ve yardım anahtarları açıklanıroptions.

Eylem Açıklama
install[assemblyNameassemblyPath | ] [scenarios] [config] [/queue[:{1||23}]] 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.

belirtilirse /queue , eylem yerel görüntü hizmeti için kuyruğa alınır. Varsayılan öncelik 3'tür. Öncelik Düzeyleri tablosuna bakın.
uninstall[assemblyName | assemblyPath] [] [configscenarios] 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. Not: .NET Framework 4'den başlayarak , * eylemi uninstall artık desteklenmiyor.
update [/queue] Geçersiz olan yerel görüntüleri güncelleştir.

Belirtilirse /queue , güncelleştirmeler yerel görüntü hizmeti için kuyruğa 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 | | continuestatus} 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". Not: ve uninstall eylemleri için display gibi myAssemblykısmi bir derleme adı sağlayabilirsiniz.

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. Paylaşılan bir bileşen çalışma zamanında yüklendiğinde, yöntemini kullanarak Load uygulamanın yapılandırma dosyası paylaşılan bileşen için yüklenen bağımlılıkları (örneğin, yüklenen bir bağımlılığın sürümü) belirler. anahtar, /ExeConfig çalışma zamanında hangi bağımlılıkların yüklendiğ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üven ile derler ve kod erişim güvenliği (CAS) ilkesi artık değerlendirilmez.

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

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

Önemli

yöntemini yerel görüntülerle kullanmayın Assembly.LoadFrom . 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 YourAssembly.exe yerel görüntü önbelleğinde yüklü olduğunu hem de her ikisinin de başvurusu OurDependency.dllolduğunu varsayalımMyAssembly.exe. Kaldırılırsa MyAssembly.exe , OurDependency.dll kaldırılmaz. Yalnızca aynı zamanda kaldırıldığında YourAssembly.exe 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 görüntü oluşturduktan sonra çalışma zamanı, derlemeyi her çalıştırdığında otomatik olarak bu yerel görüntüyü bulmayı ve kullanmayı dener. Kullanım senaryolarına göre, birden fazla görüntüler oluşturulabilir.

Örneğin, bir derlemeyi hata ayıklama veya profil oluşturma senaryosunda çalıştırırsanız, çalışma zamanı veya /Profile seçenekleriyle /Debug oluşturulmuş yerel bir görüntüyü arar. 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 /Debug yerel bir görüntü oluşturmaktır.

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

Yerel görüntülerin ne zaman kullanılacağı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 Service Pack 1'den önce, paylaşılan, tanımlayıcı adlı bileşenleri genel derleme önbelleğine yerleştirmeniz gerekir çünkü yükleyici, genel derleme önbelleğinde olmayan tanımlayıcı adlı derlemelerde ek doğrulama gerçekleştirir ve yerel görüntüleri kullanarak kazanılan başlangıç süresindeki iyileştirmeleri etkili bir şekilde ortadan kaldırır. .NET Framework 3.5 SP1'de sunulan iyileştirmeler ek doğrulamayı kaldırdı.

Kullanımla ilgili dikkat edilmesi gerekenler ö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 CIL'den daha hızlı yüklenir çünkü bunlar JIT derlemesi ve tür güvenliği doğrulaması gibi birçok başlangıç etkinliği gereksinimini ortadan kaldırır.

  • 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, CIL derlemelerinden daha fazla sabit disk alanı gerektirir ve oluşturmak için önemli ölçüde 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.

DependencyAttribute ve DefaultDependencyAttribute öznitelikleri, Ngen.exe için sabit bağlama ipuçları sağlamanıza olanak sağlar.

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

DependencyAttribute Belirtilen bir bağımlılığın yüklenme olasılığını belirtmek için öğesini bir derlemeye uygulayın. LoadHint.Always sabit bağlamanın uygun olduğunu gösterir, Default bağımlılık için varsayılan değerin kullanılması gerektiğini belirtir ve Sometimes sabit 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 ipucunu 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 Sabit bağlamanın kullanılması gerektiğini belirtmek için ile LoadHint.Always öğesini bu tür derlemelere uygulayın.

Not

özniteliğini dışında LoadHint.Always bir değerle uygulamakDefaultDependencyAttribute, özniteliği uygulamamakla aynı etkiye sahip olduğundan, bu kategoriye girmeyen .dll derlemelerine uygulamak için bir neden yoktur.

Microsoft, .NET Framework'te DefaultDependencyAttribute mscorlib.dll gibi çok az sayıda derleme için 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. ve update eylemleri, install işlemi yerel görüntü hizmeti tarafından ertelenmiş yürütme için kuyruğa alan bir /queue seçeneğe sahiptir. Ayrıca, Ngen.exe hizmet üzerinde biraz denetim sağlayan ve executeQueuedItems eylemleri vardırqueue. Daha fazla bilgi için bkz . Yerel Görüntü Hizmeti.

Yerel görüntüler ve JIT 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'e 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 yerel görüntülerin yeniden üretildiğinden emin olmak için .NET Framework'ün tüm güncelleştirmeleri komutunu yürütür Ngen Update . .NET Framework, yüklemiş olduğu .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. Bir yazılım güncelleştirmesi uygulandığında, tüm bağımlı yerel görüntülerin yeniden üretildiğinden emin olmak için yükleme programının bir Ngen Update 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 yönetme ve izinleri kullanma hakkında ayrıntılı bilgi için bkz . Kod Erişim Güvenliği.

Sorun giderme

Aşağıdaki sorun giderme konuları, JIT derleyicisinin bir yöntemi derlemeye ne zaman başlayacağını belirlemek için hangi yerel görüntülerin kullanıldığını ve uygulamanız tarafından kullanılamadığını görmenize olanak sağlar ve belirtilen yöntemlerin yerel görüntü derlemesini nasıl geri çevirebileceğinizi gösterir.

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üleyicisi) kullanabilirsiniz. Bağlama günlüğü görüntüleyici 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.

JITCompilationStart yönetilen hata ayıklama yardımcısı

JIT derleyicisinin bir işlevi derlemeye ne zaman başladığını belirlemek için jitCompilationStart yönetilen hata ayıklama yardımcısını (MDA) kullanabilirsiniz.

Yerel görüntü oluşturmayı geri çevirme

Bazı durumlarda, NGen.exe belirli bir yöntem için yerel görüntü oluşturmakta zorlanabilir veya yöntemin daha sonra yerel görüntüye derlenmesi yerine JIT derlemesini tercih edebilirsiniz. Bu durumda, NGen.exe belirli bir yöntem için yerel görüntü oluşturmasını önlemek için özniteliğini kullanabilirsiniz System.Runtime.BypassNGenAttribute . özniteliği, kodunu yerel görüntüye eklemek istemediğiniz her yönteme ayrı ayrı uygulanmalıdır. NGen.exe özniteliğini tanır ve ilgili yöntem için yerel görüntüde kod oluşturmaz.

Ancak, bunun BypassNGenAttribute .NET Framework Sınıf Kitaplığı'nda bir tür olarak tanımlanmadığını unutmayın. Kodunuzda özniteliğini kullanmak için önce 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

Ardından özniteliğini yöntem başına temel alarak uygulayabilirsiniz. Aşağıdaki örnek, Yerel Görüntü Oluşturucu'ya yöntemi için ExampleClass.ToJITCompile yerel bir görüntü oluşturmaması gerektiğini açıklar.

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 ClientApp.exeyerel bir görüntü oluşturur ve görüntüyü yerel görüntü önbelleğine yükler. Derleme için bir yapılandırma dosyası varsa, onu Ngen.exe kullanır. Ayrıca, başvuruda bulunan tüm .dll dosyaları ClientApp.exe için yerel görüntüler oluşturulur.

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 yola sahip için MyAssembly.exe yerel bir görüntü oluşturur.

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 ClientApp.exe dizin uygulama temel dizini olarak kullanılır ve tüm derleme yoklama işlemi bu dizinde başlar. seçeneğini kullanarak /AppBase bu davranışı geçersiz kılabilirsiniz.

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.

Örneğin yöntemini kullanarak Assembly.Load bir .dll dosyası yüklerse derlemenin başvurusu olmayan bir bağımlılığı olabilir. bu tür bir .dll dosyası için yerel görüntü oluşturmak için uygulama derlemesinin /ExeConfig yapılandırma bilgilerini kullanabilirsiniz. Aşağıdaki komut, 'den MyApp.exeyapılandırma bilgilerini kullanmak için MyLib.dll yerel bir görüntü oluşturur.

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 önceki örnekten öğesini MyLib.dll 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

Eylem, display önce tüm kök derlemeleri listeler ve ardından bilgisayardaki tüm yerel görüntülerin bir listesini izler.

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 kısmi adla MyAssembly, bağımlılıklarıyla ve bağımlılığı MyAssemblyolan tüm köklerle eşleşen tüm yerel görüntüleri görüntüler:

ngen display MyAssembly

Paylaşılan bileşen derlemesine bağımlı olan kökleri bilmek, paylaşılan bileşen yükseltildikten sonra bir update eylemin etkisini göstermek için yararlıdır.

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 1.0.0.0 sürümüyle 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ştirilmiş veya bağımlılıkları değiştirilmiş tüm yerel görüntüleri güncelleştirmek için eylemi bağımsız değişken olmadan kullanın update .

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ütülmeye yönelik güncelleştirmeleri kuyruğa /queue alabilirsiniz. Seçenek ve yükleme öncelikleri hakkında /queue daha fazla bilgi için bkz . Yerel Görüntü Hizmeti.

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 ClientApp.exeiçin tüm senaryoları kaldırır:

ngen uninstall ClientApp

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

ngen uninstall ClientApp /debug

Not

/debug Senaryoların kaldırılması hem hem de /profile/debug.

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

ngen uninstall "ClientApp, Version=1.0.0.0"

Aşağıdaki komutlar, için "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL"tüm senaryoları veya yalnızca bu derleme için hata ayıklama senaryolarını 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 install olduğu gibi, uzantı sağlamak için derlemeyi içeren dizinden Ngen.exe yürütülmesi veya tam yol belirtilmesi 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 koruyan bir Windows görevidir. Yerel görüntü görevi desteklenen senaryolar için yerel görüntüleri otomatik olarak oluşturur ve geri alır. Ayrıca yükleyicilerin Ngen.exe (Yerel Görüntü Oluşturucu) kullanarak ertelenmiş bir zamanda yerel görüntüler oluşturmasını ve güncelleştirmesini sağlar.

Yerel görüntü görevi, bir bilgisayarda desteklenen her CPU mimarisi için bir kez kaydedilir ve her mimariyi hedefleyen uygulamaların derlenmesine izin verir:

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 Evet

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

Görev Ömrü

Genel olarak, Windows Görev Zamanlayıcı her gece bilgisayar boşta olduğunda yerel görüntü görevini başlatır. Görev, uygulama yükleyicileri tarafından kuyruğa alınan ertelenmiş işleri, ertelenen yerel görüntü güncelleştirme isteklerini ve otomatik görüntü oluşturmayı denetler. Görev bekleyen iş öğelerini tamamlar ve ardından kapanır. Görev çalışırken bilgisayar boşta olmayı durdurursa, görev durur.

Yerel görüntü görevini, Görev Zamanlayıcı kullanıcı arabirimi aracılığıyla veya NGen.exe el ile yapılan çağrılar aracılığıyla el ile de başlatabilirsiniz. Görev bu yöntemlerden biriyle başlatılırsa, bilgisayar artık boşta olmadığında çalışmaya devam eder. NGen.exe kullanılarak el ile oluşturulan görüntüler, uygulama yükleyicileri için öngörülebilir davranışı etkinleştirmek üzere önceliklendirilir.

Yerel Görüntü Hizmeti

Yerel görüntü hizmeti, yerel görüntüler oluşturan ve koruyan bir Windows hizmetidir. Yerel görüntü hizmeti, geliştiricinin yerel görüntülerin yüklenmesini ve güncelleştirilmesini bilgisayarın boşta olduğu dönemlere ertelemesine olanak tanır.

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 bilgisayardaki boşta kalma süresi sırasında yürütülür. Hizmet durumunu kaydeder ve gerekirse birden çok yeniden başlatma işlemine devam edebilmektedir. Birden çok görüntü derlemesi kuyruğa alınabilir.

Hizmet ayrıca el ile Ngen.exe komutuyla da etkileşim kurar. El ile 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" şeklindedir. Microsoft Windows'un önceki tüm 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" şeklindedir.

Ertelenen İşlemleri Başlatma

Bir yükleme veya yükseltmeye başlamadan önce hizmetin duraklatılması önerilir. Bu, yükleyici dosyaları kopyalarken veya derlemeleri genel derleme önbelleğine koyarken hizmetin yürütülmemesini sağlar. Aşağıdaki Ngen.exe komut satırı hizmeti duraklatır:

ngen queue pause

Ertelenen tüm işlemler kuyruğa alındığında, aşağıdaki komut hizmetin sürdürülmesini sağlar:

ngen queue continue

Yeni bir uygulama yüklerken veya paylaşılan bir bileşeni güncelleştirirken yerel görüntü oluşturmayı ertelemek için veya update eylemleriyle seçeneğini install kullanın/queue. Aşağıdaki Ngen.exe komut satırları paylaşılan bir bileşen için yerel bir görüntü yükler ve etkilenmiş olabilecek tüm köklerin güncelleştirmesini gerçekleştirir:

ngen install MyComponent /queue
ngen update /queue

Eylem, update yalnızca kullananları MyComponentdeğil, geçersiz kılınmış tüm yerel görüntüleri yeniden oluşturur.

Uygulamanız birçok kökden oluşuyorsa ertelenen eylemlerin önceliğini denetleyebilirsiniz. Aşağıdaki komutlar üç kökün yüklenmesini kuyruğa alır. Assembly1 boşta kalma süresi beklemeden önce yüklenir. Assembly2 da boşta kalma süresi beklemeden yüklenir, ancak tüm öncelik 1 eylemleri tamamlandıktan sonra. Assembly3 , hizmet bilgisayarın boşta olduğunu algıladığında yüklenir.

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

Kuyruğa alınan eylemlerin zaman uyumlu bir şekilde gerçekleşmesini zorlamak executeQueuedItems için eylemi kullanabilirsiniz. İsteğe bağlı önceliği sağlarsanız, bu eylem yalnızca eşit veya düşük önceliğe sahip kuyruğa alınmış eylemleri etkiler. Varsayılan öncelik 3'dür, bu nedenle aşağıdaki Ngen.exe komutu kuyruğa alınan tüm eylemleri hemen işler ve tamamlanana kadar döndürmez:

ngen executeQueuedItems

Zaman uyumlu komutlar Ngen.exe tarafından 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 /queue bir Ngen.exe komutunun yürütülmesiyle başlatıldıktan sonra, tüm eylemler tamamlanana kadar hizmet arka planda çalışır. Hizmet, gerekirse birden çok yeniden başlatma işlemine devam edebilmesi için durumunu kaydeder. Hizmet kuyruğa alınmış başka eylem olmadığını algıladığında, bilgisayarın bir sonraki önyüklemesinde yeniden başlatılmaması ve ardından kendini kapatması için durumunu sıfırlar.

İstemcilerle Hizmet Etkileşimi

.NET Framework sürüm 2.0'da yerel görüntü hizmetiyle tek etkileşim komut satırı aracı Ngen.exe. Yerel görüntü hizmeti için eylemleri kuyruğa almak ve hizmetle etkileşime geçmek için yükleme betiklerinde komut satırı aracını kullanın.

Ayrıca bkz.