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 action
birinin 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 [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. 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 ] [] [config scenarios ] |
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 | | 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" . Not: ve uninstall eylemleri için display gibi myAssembly kı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.dll
olduğ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:
özniteliğini LoaderOptimizationAttribute uygulamanıza uygulayın.
AppDomainSetup.LoaderOptimization Yeni bir uygulama etki alanı için kurulum bilgileri oluştururken özelliğini ayarlayın.
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.exe
yerel 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.exe
yapı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ığı MyAssembly
olan 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.exe
iç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.exe
tü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.exe
iç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ı MyComponent
değ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.