Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yerel Görüntü Oluşturucu (Ngen.exe), yönetilen uygulamaların performansını geliştiren bir araçtır. Ngen.exe, derlenmiş işlemciye özgü makine kodunu içeren dosyalar olan yerel görüntüler oluşturur ve bunları yerel bilgisayardaki yerel görüntü önbelleğine yükler. Çalışma zamanı, özgün derlemeyi derlemek için tam zamanında (JIT) derleyicisini kullanmak yerine önbellekten yerel görüntüleri kullanabilir.
Uyarı
Ngen.exe yalnızca .NET Framework'i hedefleyen derlemeler için yerel görüntüler 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şim güvenliği (CAS) ilkesi artık değerlendirilmez.
Ngen.exe ile oluşturulan yerel görüntüler artık kısmi güven içinde çalışan uygulamalara yüklenemez.
.NET Framework sürüm 2.0'da Ngen.exe yapılan değişiklikler:
Bir derlemenin yüklenmesi bağımlılıklarını da yükleyerek Ngen.exesöz dizimini 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ü oluşturmak ve yüklemek için bilgisayarda boşta kalma süresi kullanan bir hizmet tarafından yürütülmek üzere ertelenebilir.
Görüntü geçersiz kılınmasıyla ilgili bazı nedenler ortadan 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.
Uyarı
.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 | Description |
|---|---|
install[assemblyNameassemblyPath | ] [scenarios] [config] [/queue[:{1||23}]] |
Derleme ve bağımlılıkları için yerel görüntüler oluşturun ve görüntüleri yerel görüntü önbelleğine yükleyin. belirtilirse /queue , eylem yerel görüntü hizmeti için kuyruğa alınır. Varsayılan öncelik 3'dür.
Öncelik Düzeyleri tablosuna bakın. |
uninstall[assemblyName | assemblyPath] [] [configscenarios] |
Derlemenin yerel görüntülerini ve bağımlılıklarını yerel görüntü önbelleğinden silin. 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 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 hale gelen yerel görüntüleri güncelleştirin. Belirtilirse /queue , güncelleştirmeler yerel görüntü hizmeti için kuyruğa alınır. Güncelleştirmeler her zaman öncelik 3'te zamanlanır, bu nedenle bilgisayar boşta olduğunda çalışır. |
display [assemblyName | assemblyPath] |
Derleme ve bağımlılıkları için yerel görüntülerin durumunu görüntüleyin. 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] |
Kuyruğa alınan derleme işlerini yürütme. Bir öncelik belirtilirse, daha büyük veya eşit önceliğe sahip derleme işleri yürütülür. Öncelik belirtilmezse, kuyruğa alınan tüm derleme işleri yürütülür. |
queue{pause | | continuestatus} |
Yerel görüntü hizmetini duraklatın, duraklatılan hizmetin devam etmesi için izin verin veya hizmetin durumunu sorgular. |
Arguments
| Argument | Description |
|---|---|
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. Ngen.exe komut satırı başına yalnızca bir derleme belirtilebilir. |
assemblyPath |
Derlemenin açık yolu. Tam veya göreli bir yol belirtebilirsiniz. Yolu olmayan bir dosya adı belirtirseniz, derleme geçerli dizinde bulunmalıdır. Ngen.exe komut satırı başına yalnızca bir derleme belirtilebilir. |
Öncelik Düzeyleri
| Priority | Description |
|---|---|
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 oluşturulur ve yüklenir, ancak tüm öncelikli 1 eylem (ve bağımlılıkları) tamamlandıktan sonra. |
3 |
Yerel görüntü hizmeti bilgisayarın boşta olduğunu algıladığında yerel görüntüler yüklenir. Bkz. Yerel Görüntü Hizmeti. |
Scenarios
| Scenario | Description |
|---|---|
/Debug |
Bir hata ayıklayıcısı altında kullanılabilecek yerel görüntüler oluşturun. |
/Profile |
Profil oluşturucu altında kullanılabilecek yerel görüntüler oluşturun. |
/NoDependencies |
Belirtilen senaryo seçenekleri için gereken en az sayıda yerel görüntü oluşturun. |
Config
| Konfigürasyon | Description |
|---|---|
/ExeConfig:
exePath
|
Belirtilen yürütülebilir derlemenin yapılandırmasını kullanın. Ngen.exe bağımlılıklara bağlanırken yükleyiciyle aynı kararları alması gerekir. 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ı bulmak için belirtilen dizini uygulama tabanı olarak kullanın. |
Options
| Seçenek | Description |
|---|---|
/nologo |
Microsoft başlangıç başlığı ekranını gizleme. |
/silent |
Başarı iletilerinin görüntülenmesini engelleme. |
/verbose |
Hata ayıklama için ayrıntılı bilgileri görüntüleyin. |
/help, /? |
Geçerli sürüm için komut söz dizimini ve seçeneklerini görüntüleyin. |
Açıklamalar
Ngen.exeçalıştırmak için yönetici ayrıcalıklarına sahip olmanız gerekir.
Dikkat
Tam olarak güvenilir olmayan derlemelerde Ngen.exe ç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, tam zamanında (JIT) derleyicisi çağrılır.
Ngen.exe, eylem 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ğımlılıklar, derleme bildirimindeki başvurulardan 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 yöntemle 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ı sayar. Ö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.
Genel derleme önbelleğindeki bir derleme için yerel görüntü oluşturuyorsanız görünen adını belirtin. Bkz. Assembly.FullName.
Ngen.exe oluşturulan yerel görüntüler uygulama etki alanları arasında paylaşılabilir. Bu, derlemelerin uygulama etki alanları arasında paylaşılması gereken uygulama senaryolarında Ngen.exe kullanabileceğiniz anlamına gelir. Etki alanı nötrlüğü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.
Aynı derlemeyi birden çok uygulama etki alanına yüklerken her zaman etki alanı nötr kodu kullanın. Paylaşılan bir etki alanına yüklendikten sonra yerel görüntü paylaşılmayan bir uygulama etki alanına yüklenirse kullanılamaz.
Uyarı
Etki alanı nötr kod kaldırılamaz ve özellikle statik üyelere erişirken performans biraz 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 bağlı olarak birden çok görüntü 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şleşen bir yerel 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 geliştirmeleri sağlayabilir: geliştirilmiş bellek kullanımı ve daha kısa başlatma süresi.
Uyarı
Yerel görüntülerin performansı, kod ve veri erişim desenleri, modül sınırları boyunca kaç çağrı yapıldığı ve diğer uygulamalar tarafından zaten yüklenmiş olan bağımlılık sayısı gibi analizi zorlaştıran bir dizi faktöre bağlıdır. Yerel görüntülerin uygulamanıza fayda sağlayıp sağlamadığını belirlemenin tek yolu, önemli dağıtım senaryolarınızda dikkatli performans ölçümleri yapmaktır.
Geliştirilmiş bellek kullanımı
Yerel görüntüler, işlemler arasında kod paylaşıldığında bellek kullanımını önemli ölçüde iyileştirebilir. Yerel görüntüler Windows PE dosyalarıdır, bu nedenle .dll dosyasının tek bir kopyası birden çok işlem tarafından paylaşılabilir; Buna karşılık, JIT derleyicisi tarafından üretilen yerel kod özel bellekte depolanır ve paylaşılamaz.
Terminal hizmetleri altında çalışan uygulamalar da paylaşılan kod sayfalarından yararlanabilir.
Ayrıca, JIT derleyicisinin yüklenmemesi her uygulama örneği için sabit miktarda bellek tasarrufu sağlar.
Daha hızlı uygulama başlatma
Derlemeleri Ngen.exe ile önceden derlemek, bazı uygulamalar için başlangıç süresini iyileştirebilir. Genel olarak, uygulamalar bileşen derlemelerini paylaştığında kazançlar elde edilebilir çünkü ilk uygulama başlatıldıktan sonra paylaşılan bileşenler sonraki uygulamalar için zaten yüklenir. Bir uygulamadaki tüm derlemelerin sabit diskten yüklenmesi gereken soğuk başlatma, sabit disk erişim süresi baskın olduğundan yerel görüntülerden bu kadar yararlanmaz.
Ana uygulama derlemesine sabit bağlanan tüm görüntülerin aynı anda yüklenmesi gerektiğinden, sabit bağlama başlangıç süresini etkileyebilir.
Uyarı
.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 hususlar ve uygulama konuları, uygulamanız için yerel görüntüleri değerlendirme çabasının gerekip gerekmediğine karar verirken size 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.
JIT derleyicisine gerek olmadığından yerel görüntüler daha küçük bir başlangıç çalışma kümesi gerektirir.
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ülerin korunması gerekir.
Özgün derlemeye veya bağımlılıklarından birine hizmet verilirken görüntülerin yeniden üretilmesi gerekir.
Tek bir derlemenin farklı uygulamalarda veya farklı senaryolarda kullanmak için birden çok yerel görüntüye ihtiyacı olabilir. Ö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 tarafından oluşturulmalıdır; yani, Yöneticiler grubundaki bir Windows hesabından.
Bu genel noktalara ek olarak, yerel görüntülerin performans avantajı sağlayıp sağlayamayacağını belirlerken uygulamanızın doğası dikkate alınmalıdır:
Uygulamanız birçok paylaşılan bileşenin kullanıldığı bir ortamda çalışıyorsa, yerel görüntüler bileşenlerin birden çok işlem tarafından paylaşılmasına olanak tanır.
Uygulamanız birden çok uygulama etki alanı kullanıyorsa, yerel görüntüler kod sayfalarının etki alanları arasında paylaşılmasına olanak sağlar.
Uyarı
.NET Framework 1.0 ve 1.1 sürümlerinde yerel görüntüler uygulama etki alanları arasında paylaşılamaz. Sürüm 2.0 veya sonraki sürümlerde bu durum geçerli değildir.
Uygulamanız Terminal Server altında çalıştırılacaksa, yerel görüntüler kod sayfalarının paylaşılmasına izin verir.
Büyük uygulamalar genellikle derlemeden yerel görüntülere kadar avantaj sağlar. Küçük uygulamalar genellikle fayda sağlamaz.
Uzun süre çalışan uygulamalar için çalışma zamanı JIT derlemesi yerel görüntülerden biraz daha iyi performans gösterir. (Sabit bağlama, bu performans farkını bir dereceye kadar hafifletebilir.)
Derleme temel adreslerinin önemi
Yerel görüntüler Windows PE dosyaları olduğundan, diğer yürütülebilir dosyalarla aynı yeniden boyutlandırma sorunlarına tabidir. Sabit bağlama kullanılırsa yeniden konumlandırmanın performans maliyeti daha da belirgindir.
Yerel görüntünün temel adresini ayarlamak için derleyicinizin uygun seçeneğini kullanarak derlemenin temel adresini ayarlayın. Ngen.exe yerel görüntü için bu temel adresi kullanır.
Uyarı
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 adreslerin hesaplanması gerekir.
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
Sabit bağlama, aktarım hızını artırır ve yerel görüntüler için çalışma kümesi boyutunu azaltır. Sabit bağlamanın dezavantajı, bir derlemeye sabit bağlanan tüm görüntülerin, derleme yüklendiğinde yüklenmesi gerektiğidir. Bu, büyük bir uygulamanın başlangıç süresini önemli ölçüde artırabilir.
Sabit bağlama, uygulamanızın performans açısından kritik tüm senaryolarında yüklenen bağımlılıklar için uygundur. Yerel görüntü kullanımının her yönüyle olduğu gibi, sıkı bağlamanın uygulamanızın performansını geliştirip geliştirmediğini belirlemenin tek yolu dikkatli performans ölçümleridir.
DependencyAttribute ve DefaultDependencyAttribute öznitelikleri, Ngen.exeiçin sabit bağlama ipuçları sağlamanıza olanak sağlar.
Uyarı
Bu öznitelikler komutları değil Ngen.exeipuçlarıdır. Bunları kullanmak sabit bağlamayı garanti etmez. Bu özniteliklerin anlamı gelecek sürümlerde 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ğımlılığı olan bir derlemenin özniteliklerini gösterir. İlk bağımlılık (Assembly1) sabit bağlama için uygun bir adaydır ve ikinci (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 adı, dosya adı uzantısını içermez. Görünen adlar kullanılabilir.
Derleme için varsayılan bağlama ipucunu belirtme
Varsayılan bağlama ipuçları yalnızca bağımlılıkları olan herhangi bir uygulama tarafından hemen ve sık kullanılacak 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.
Uyarı
Özniteliğin dışında LoadHint.Always bir değerle uygulanması, özniteliğin hiç uygulanmamasıyla DefaultDependencyAttribute aynı etkiye sahip olduğundan, bu kategoriye girmeyen .dll derlemelerine uygulamak için bir neden yoktur.
Microsoft, sabit bağlamanın .NET Framework'te mscorlib.dllgibi çok az sayıda derleme için varsayılan olduğunu belirtmek için kullanır DefaultDependencyAttribute .
Ertelenmiş işleme
Çok büyük bir uygulama için yerel görüntülerin oluşturulması önemli ölçüde zaman alabilir. Benzer şekilde, paylaşılan bir bileşende yapılan değişiklikler veya bilgisayar ayarlarında yapılan değişiklikler birçok yerel görüntünün güncelleştirilmiş olmasını 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
Ngen.exe bir derlemede oluşturamadığı yöntemlerle karşılaşırsa, bunları yerel görüntüden dışlar. Çalışma zamanı bu derlemeyi yürüttüğünde, yerel görüntüye dahil edilmeyen yöntemler için JIT derlemesine geri döner.
Ayrıca, derleme yükseltildiyse veya herhangi bir nedenle görüntü geçersiz kılındıysa yerel görüntüler kullanılmaz.
Geçersiz görüntüler
Derlemenin yerel görüntüsünü oluşturmak için Ngen.exe kullandığınızda çıkış, belirttiğiniz 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 kimlik değiştirir).
Derlemenin başvurduğunu tüm derlemelerin tam kimliği (yeniden derleme kimlik değiştirir).
Güvenlik faktörleri.
Ngen.exe yerel görüntü oluştururken bu bilgileri kaydeder. Bir derleme yürütürken çalışma zamanı, bilgisayarın geçerli ortamıyla eşleşen seçenekler ve ayarlarla oluşturulan yerel görüntüyü arar. Çalışma zamanı, eşleşen bir yerel görüntü bulamazsa derlemenin JIT derlemesine geri döner. Bilgisayarın ayarlarında ve ortamında yapılan aşağıdaki değişiklikler yerel görüntülerin geçersiz olmasına neden 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 tam kimliği.
Bir derlemeyi yeniden derlerseniz, derlemenin karşılık gelen yerel görüntüsü geçersiz olur.
Bütünleştirilmiş kod başvurularının tam kimliği.
Yönetilen bir derlemeyi güncelleştirirseniz, doğrudan veya dolaylı olarak bu derlemeye bağımlı olan tüm yerel görüntüler geçersiz hale gelir ve yeniden üretilmesi gerekir. Buna hem normal başvurular hem de sabit bağlı bağımlılıklar dahildir. 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 Updatekomut yürütmesi gerekir.Güvenlik faktörleri.
Daha önce bir derlemeye verilen izinleri kısıtlamak için makine güvenlik ilkesinin değiştirilmesi, bu derleme için önceden derlenmiş bir yerel görüntünün geçersiz olmasına neden 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ğlama Günlük Görüntüleyicisi
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, yerel görüntünü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 yerel görüntüye derlenmesi yerine JIT derlemesini tercih edebilirsiniz. Bu durumda, özniteliğini System.Runtime.BypassNGenAttribute kullanarak NGen.exe belirli bir yöntem için yerel görüntü oluşturmasını engelleyebilirsiniz. ö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 Ngen.exe bunu 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üklenen bir görüntü kök olarak da adlandırılır. Kök bir uygulama veya paylaşılan 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ı bulunurken, Ngen.exe ortak dil çalışma zamanı tarafından kullanılan aynı yoklama 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.
Uyarı
Bu, uygulama tabanının geçerli dizine ayarlandığı .NET Framework 1.0 ve 1.1 sürümlerindeki Ngen.exe davranışından bir değişikliktir.
Ö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
Uygulama kaldırıldığında bu şekilde yüklenen derlemeler kaldırılmaz.
Bir bağımlılığı kaldırmak için, bu bağımlılığı yüklemek için kullanılan 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 derleme ö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şlem için tam bir yerel görüntü kümesi, hata ayıklama için başka bir tam küme ve profil oluşturma için üçüncü bir küme 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.exekullanılarak görüntülenebilir. Aşağıdaki komut, yerel görüntü önbelleğ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 bu derlemenin bilgilerini görüntülemek için bir 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.
Bir derlemenin dosya uzantısını belirtirseniz, yolu belirtmeniz veya derlemeyi içeren dizinden Ngen.exe 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 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, paylaşılan bileşenlerin yalnızca bunlara bağımlı tüm derlemeler kaldırıldığında kaldırılması için bir bağımlılık listesi tutar. Ayrıca, paylaşılan bir bileşen kök olarak yüklenmişse kaldırılmaz.
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
Uyarı
/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ı | Yes |
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 el ile NGen.exeçağrıları aracılığıyla da 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.
Uyarı
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 Ngen.exekomut satırı aracıyla gerçekleştirilir. 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.