Bagikan melalui


Ngen.exe (Native Image Generator)

Native Image Generator (Ngen.exe) adalah alat yang meningkatkan performa aplikasi terkelola. Ngen.exe membuat gambar asli, yang merupakan file yang berisi kode mesin khusus prosesor yang dikompilasi, dan menginstalnya ke dalam cache gambar asli di komputer lokal. Runtime dapat menggunakan gambar asli dari cache alih-alih menggunakan kompilator just-in-time (JIT) untuk mengkompilasi rakitan asli.

Nota

Ngen.exe mengkompilasi gambar asli untuk rakitan yang menargetkan .NET Framework saja. Generator gambar asli yang setara untuk .NET Core adalah CrossGen.

Perubahan pada Ngen.exe di .NET Framework 4:

  • Ngen.exe sekarang mengkompilasi rakitan dengan kepercayaan penuh, dan kebijakan keamanan akses kode (CAS) tidak lagi dievaluasi.

  • Gambar asli yang dihasilkan dengan Ngen.exe tidak dapat lagi dimuat ke dalam aplikasi yang berjalan dalam kepercayaan parsial.

Perubahan pada Ngen.exe di .NET Framework versi 2.0:

  • Menginstal rakitan juga menginstal dependensinya, menyederhanakan sintaks Ngen.exe.

  • Gambar asli sekarang dapat dibagikan di seluruh domain aplikasi.

  • Tindakan baru, update, membuat ulang gambar yang telah dibatalkan.

  • Tindakan dapat ditangguhkan untuk eksekusi oleh layanan yang menggunakan waktu menganggur pada komputer untuk menghasilkan dan menginstal gambar.

  • Beberapa penyebab pembatalan gambar telah dihilangkan.

Di Windows 8, lihat Tugas Gambar Asli.

Untuk informasi tambahan tentang menggunakan Ngen.exe dan layanan gambar asli, lihat Native Image Service.

Nota

Ngen.exe sintaks untuk versi 1.0 dan 1.1 dari .NET Framework dapat ditemukan di Native Image Generator (Ngen.exe) Legacy Sintaks.

Alat ini otomatis terpasang dengan Visual Studio. Untuk menjalankan alat ini, gunakan Perintah Pengembang Visual Studio atau Visual Studio Developer PowerShell.

Pada perintah, masukkan berikut ini:

Syntax

ngen action [options]
ngen /? | /help

Tindakan

Tabel berikut ini memperlihatkan sintaks masing-masing action. Untuk deskripsi bagian individual dari actiontabel , lihat Tabel Argumen, Tingkat Prioritas, Skenario, dan Konfigurasi . Tabel Opsi menjelaskan options dan bantuan beralih.

Tindakan Description
install[assemblyName | assemblyPath] [scenarios] [config] [/queue:{1|2|3}]] Hasilkan gambar asli untuk rakitan dan dependensinya dan instal gambar di cache gambar asli.

Jika /queue ditentukan, tindakan diantrekan untuk layanan gambar asli. Prioritas default adalah 3. Lihat tabel Tingkat Prioritas .
uninstall [assemblyName | assemblyPath] [scenarios] [config] Hapus gambar asli rakitan dan dependensinya dari cache gambar asli.

Untuk menghapus instalan satu gambar dan dependensinya, gunakan argumen baris perintah yang sama yang digunakan untuk menginstal gambar. Nota: Dimulai dengan .NET Framework 4, tindakan uninstall * tidak lagi didukung.
update [/queue] Perbarui gambar asli yang menjadi tidak valid.

Jika /queue ditentukan, pembaruan diantrekan untuk layanan gambar asli. Pembaruan selalu dijadwalkan pada prioritas 3, sehingga berjalan saat komputer diam.
display [assemblyName | assemblyPath] Tampilkan status gambar asli untuk rakitan dan dependensinya.

Jika tidak ada argumen yang disediakan, semua yang ada di cache gambar asli ditampilkan.
executeQueuedItems [1|2|3]

-atau-

eqi [1|2|3]
Jalankan pekerjaan kompilasi yang diantrekan.

Jika prioritas ditentukan, pekerjaan kompilasi dengan prioritas yang lebih besar atau sama dijalankan. Jika tidak ada prioritas yang ditentukan, semua pekerjaan kompilasi yang diantrekan akan dijalankan.
queue{pause | continue | status} Jeda layanan gambar asli, izinkan layanan yang dijeda untuk melanjutkan, atau mengkueri status layanan.

Arguments

Argumen Description
assemblyName Nama tampilan lengkap rakitan. Contohnya, "myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5". Nota: Anda dapat memberikan nama rakitan parsial, seperti myAssembly, untuk display tindakan dan uninstall .

Hanya satu rakitan yang dapat ditentukan per baris perintah Ngen.exe.
assemblyPath Jalur eksplisit assembly. Anda dapat menentukan jalur lengkap atau relatif.

Jika Anda menentukan nama file tanpa jalur, rakitan harus terletak di direktori saat ini.

Hanya satu rakitan yang dapat ditentukan per baris perintah Ngen.exe.

Tingkat Prioritas

Priority Description
1 Gambar asli dihasilkan dan segera diinstal, tanpa menunggu waktu menganggur.
2 Gambar asli dihasilkan dan diinstal tanpa menunggu waktu diam, tetapi setelah semua tindakan prioritas 1 (dan dependensinya) telah selesai.
3 Gambar asli diinstal ketika layanan gambar asli mendeteksi bahwa komputer menganggur. Lihat Native Image Service.

Skenario

Scenario Description
/Debug Hasilkan gambar asli yang dapat digunakan di bawah debugger.
/Profile Hasilkan gambar asli yang dapat digunakan di bawah profiler.
/NoDependencies Hasilkan jumlah minimum gambar asli yang diperlukan oleh opsi skenario yang ditentukan.

Config

Konfigurasi Description
/ExeConfig: exePath Gunakan konfigurasi rakitan yang dapat dieksekusi yang ditentukan.

Ngen.exe perlu membuat keputusan yang sama dengan loader saat mengikat dependensi. Ketika komponen bersama dimuat saat runtime, menggunakan Load metode , file konfigurasi aplikasi menentukan dependensi yang dimuat untuk komponen bersama — misalnya, versi dependensi yang dimuat. Sakelar /ExeConfig memberikan panduan Ngen.exe tentang dependensi mana yang akan dimuat saat runtime.
/AppBase: directoryPath Saat menemukan dependensi, gunakan direktori yang ditentukan sebagai basis aplikasi.

Opsi

Option Description
/nologo Tekan tampilan banner startup Microsoft.
/silent Menekan tampilan pesan keberhasilan.
/verbose Tampilkan informasi terperinci untuk penelusuran kesalahan.
/help, /? Tampilkan sintaks perintah dan opsi untuk rilis saat ini.

Komentar

Untuk menjalankan Ngen.exe, Anda harus memiliki hak administratif.

Perhatian

Jangan jalankan Ngen.exe pada rakitan yang tidak sepenuhnya tepercaya. Dimulai dengan .NET Framework 4, Ngen.exe mengkompilasi rakitan dengan kepercayaan penuh, dan kebijakan keamanan akses kode (CAS) tidak lagi dievaluasi.

Dimulai dengan .NET Framework 4, gambar asli yang dihasilkan dengan Ngen.exe tidak dapat lagi dimuat ke dalam aplikasi yang berjalan dalam kepercayaan parsial. Sebaliknya, pengkompilasi just-in-time (JIT) dipanggil.

Ngen.exe menghasilkan gambar asli untuk rakitan yang ditentukan oleh assemblyname argumen untuk install tindakan dan semua dependensinya. Dependensi ditentukan dari referensi dalam manifes perakitan. Satu-satunya skenario di mana Anda perlu menginstal dependensi secara terpisah adalah ketika aplikasi memuatnya menggunakan pantulan, misalnya dengan memanggil Assembly.Load metode .

Penting

Jangan gunakan Assembly.LoadFrom metode dengan gambar asli. Gambar yang dimuat dengan metode ini tidak dapat digunakan oleh rakitan lain dalam konteks eksekusi.

Ngen.exe mempertahankan hitungan dependensi. Misalnya, misalkan MyAssembly.exe dan YourAssembly.exe keduanya diinstal dalam cache gambar asli, dan keduanya memiliki referensi ke OurDependency.dll. Jika MyAssembly.exe dihapus instalannya, OurDependency.dll tidak dihapus instalasinya. Ini hanya dihapus ketika YourAssembly.exe juga dihapus instalasinya.

Jika Anda menghasilkan gambar asli untuk rakitan di cache perakitan global, tentukan nama tampilannya. Lihat Assembly.FullName.

Gambar asli yang Ngen.exe hasilkan dapat dibagikan di seluruh domain aplikasi. Ini berarti Anda dapat menggunakan Ngen.exe dalam skenario aplikasi yang mengharuskan rakitan dibagikan di seluruh domain aplikasi. Untuk menentukan netralitas domain:

Selalu gunakan kode netral domain saat memuat rakitan yang sama ke beberapa domain aplikasi. Jika gambar asli dimuat ke dalam domain aplikasi yang tidak dibagikan setelah dimuat ke domain bersama, gambar tersebut tidak dapat digunakan.

Nota

Kode netral domain tidak dapat dibongkar, dan performa mungkin sedikit lebih lambat, terutama saat mengakses anggota statis.

Di bagian Komentar ini:

Menghasilkan gambar untuk skenario yang berbeda

Setelah Anda membuat gambar asli untuk rakitan, runtime secara otomatis mencoba menemukan dan menggunakan gambar asli ini setiap kali menjalankan perakitan. Beberapa gambar dapat dihasilkan, tergantung pada skenario penggunaan.

Misalnya, jika Anda menjalankan rakitan dalam skenario penelusuran kesalahan atau pembuatan profil, runtime mencari gambar asli yang dihasilkan dengan /Debug opsi atau /Profile . Jika tidak dapat menemukan gambar asli yang cocok, runtime kembali ke kompilasi JIT standar. Satu-satunya cara untuk men-debug gambar asli adalah dengan membuat gambar asli dengan /Debug opsi .

Tindakan ini uninstall juga mengenali skenario, sehingga Anda dapat menghapus instalan semua skenario atau hanya skenario yang dipilih.

Menentukan kapan menggunakan gambar asli

Gambar asli dapat memberikan peningkatan performa di dua area: peningkatan penggunaan memori dan pengurangan waktu mulai.

Nota

Performa gambar asli tergantung pada sejumlah faktor yang menyulitkan analisis, seperti pola akses kode dan data, berapa banyak panggilan yang dilakukan di seluruh batas modul, dan berapa banyak dependensi yang telah dimuat oleh aplikasi lain. Satu-satunya cara untuk menentukan apakah gambar asli menguntungkan aplikasi Anda adalah dengan pengukuran performa yang cermat dalam skenario penyebaran utama Anda.

Peningkatan penggunaan memori

Gambar asli dapat secara signifikan meningkatkan penggunaan memori saat kode dibagikan di antara proses. Gambar asli adalah file Windows PE, sehingga satu salinan file .dll dapat dibagikan oleh beberapa proses; sebaliknya, kode asli yang dihasilkan oleh pengkompilasi JIT disimpan dalam memori privat dan tidak dapat dibagikan.

Aplikasi yang dijalankan di bawah layanan terminal juga dapat memperoleh manfaat dari halaman kode bersama.

Selain itu, tidak memuat pengkompilasi JIT menghemat jumlah memori tetap untuk setiap instans aplikasi.

Startup aplikasi yang lebih cepat

Rakitan precompiling dengan Ngen.exe dapat meningkatkan waktu startup untuk beberapa aplikasi. Secara umum, keuntungan dapat dilakukan ketika aplikasi berbagi rakitan komponen karena setelah aplikasi pertama dimulai, komponen bersama sudah dimuat untuk aplikasi berikutnya. Startup dingin, di mana semua rakitan dalam aplikasi harus dimuat dari hard disk, tidak mendapat manfaat sebanyak dari gambar asli karena waktu akses hard disk mendominasi.

Pengikatan keras dapat memengaruhi waktu startup, karena semua gambar yang terikat keras ke rakitan aplikasi utama harus dimuat pada saat yang sama.

Nota

Sebelum .NET Framework 3.5 Service Pack 1, Anda harus menempatkan komponen bersama bernama kuat di cache perakitan global, karena loader melakukan validasi tambahan pada rakitan bernama kuat yang tidak ada di cache perakitan global, secara efektif menghilangkan peningkatan dalam waktu startup yang diperoleh dengan menggunakan gambar asli. Pengoptimalan yang diperkenalkan dalam .NET Framework 3.5 SP1 menghapus validasi tambahan.

Ringkasan pertimbangan penggunaan

Pertimbangan umum dan pertimbangan aplikasi berikut dapat membantu Anda dalam memutuskan apakah akan melakukan upaya mengevaluasi gambar asli untuk aplikasi Anda:

  • Gambar asli dimuat lebih cepat daripada CIL karena menghilangkan kebutuhan akan banyak aktivitas startup, seperti kompilasi JIT dan verifikasi keamanan jenis.

  • Gambar asli memerlukan set kerja awal yang lebih kecil karena tidak perlu kompiler JIT.

  • Gambar asli memungkinkan berbagi kode antar proses.

  • Gambar asli membutuhkan lebih banyak ruang hard disk daripada rakitan CIL dan mungkin memerlukan waktu yang cukup lama untuk dihasilkan.

  • Gambar asli harus dipertahankan.

    • Gambar perlu diregenerasi ketika rakitan asli atau salah satu dependensinya dilayankan.

    • Satu rakitan mungkin memerlukan beberapa gambar asli untuk digunakan dalam aplikasi yang berbeda atau skenario yang berbeda. Misalnya, informasi konfigurasi dalam dua aplikasi dapat mengakibatkan keputusan pengikatan yang berbeda untuk rakitan dependen yang sama.

    • Gambar asli harus dihasilkan oleh administrator; yaitu, dari akun Windows di grup Administrator.

Selain pertimbangan umum ini, sifat aplikasi Anda harus dipertimbangkan saat menentukan apakah gambar asli mungkin memberikan manfaat performa:

  • Jika aplikasi Anda berjalan di lingkungan yang menggunakan banyak komponen bersama, gambar asli memungkinkan komponen dibagikan oleh beberapa proses.

  • Jika aplikasi Anda menggunakan beberapa domain aplikasi, gambar asli memungkinkan halaman kode dibagikan di seluruh domain.

    Nota

    Dalam .NET Framework versi 1.0 dan 1.1, gambar asli tidak dapat dibagikan di seluruh domain aplikasi. Ini tidak terjadi dalam versi 2.0 atau yang lebih baru.

  • Jika aplikasi Anda akan dijalankan di bawah Server Terminal, gambar asli memungkinkan berbagi halaman kode.

  • Aplikasi besar umumnya mendapat manfaat dari kompilasi hingga gambar asli. Aplikasi kecil umumnya tidak menguntungkan.

  • Untuk aplikasi jangka panjang, kompilasi JIT runtime berkinerja sedikit lebih baik daripada gambar asli. (Pengikatan keras dapat mengurangi perbedaan performa ini ke beberapa derajat.)

Pentingnya alamat dasar perakitan

Karena gambar asli adalah file Windows PE, gambar tersebut tunduk pada masalah rebasing yang sama dengan file lain yang dapat dieksekusi. Biaya performa relokasi bahkan lebih jelas jika pengikatan keras digunakan.

Untuk mengatur alamat dasar untuk gambar asli, gunakan opsi pengkompilasi yang sesuai untuk mengatur alamat dasar untuk perakitan. Ngen.exe menggunakan alamat dasar ini untuk gambar asli.

Nota

Gambar asli lebih besar dari rakitan terkelola tempat mereka dibuat. Alamat dasar harus dihitung untuk memungkinkan ukuran yang lebih besar ini.

Anda dapat menggunakan alat seperti dumpbin.exe untuk melihat alamat dasar gambar asli pilihan.

Pengikatan keras

Pengikatan keras meningkatkan throughput dan mengurangi ukuran set kerja untuk gambar asli. Kerugian dari pengikatan keras adalah bahwa semua gambar yang terikat keras ke assembly harus dimuat ketika assembly dimuat. Ini dapat secara signifikan meningkatkan waktu startup untuk aplikasi besar.

Pengikatan keras sesuai untuk dependensi yang dimuat dalam semua skenario kritis performa aplikasi Anda. Seperti halnya aspek penggunaan gambar asli, pengukuran performa yang cermat adalah satu-satunya cara untuk menentukan apakah pengikatan keras meningkatkan performa aplikasi Anda.

Atribut DependencyAttribute dan DefaultDependencyAttribute memungkinkan Anda untuk memberikan petunjuk pengikatan keras ke Ngen.exe.

Nota

Atribut ini adalah petunjuk untuk Ngen.exe, bukan perintah. Menggunakannya tidak menjamin pengikatan keras. Arti atribut ini dapat berubah dalam rilis mendatang.

Menentukan petunjuk pengikatan untuk dependensi

DependencyAttribute Terapkan ke assembly untuk menunjukkan kemungkinan dependensi tertentu akan dimuat. LoadHint.Always menunjukkan bahwa pengikatan keras sesuai, Default menunjukkan bahwa default untuk dependensi harus digunakan, dan Sometimes menunjukkan bahwa pengikatan keras tidak sesuai.

Kode berikut menunjukkan atribut untuk rakitan yang memiliki dua dependensi. Dependensi pertama (Assembly1) adalah kandidat yang sesuai untuk pengikatan keras, dan yang kedua (Assembly2) tidak.

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)];

Nama rakitan tidak menyertakan ekstensi nama file. Nama tampilan dapat digunakan.

Menentukan petunjuk pengikatan default untuk rakitan

Petunjuk pengikatan default hanya diperlukan untuk rakitan yang akan digunakan segera dan sering oleh aplikasi apa pun yang memiliki dependensi pada mereka. Terapkan DefaultDependencyAttribute dengan LoadHint.Always ke rakitan tersebut untuk menentukan bahwa pengikatan keras harus digunakan.

Nota

Tidak ada alasan untuk diterapkan DefaultDependencyAttribute ke rakitan .dll yang tidak termasuk dalam kategori ini, karena menerapkan atribut dengan nilai apa pun selain memiliki efek yang sama dengan LoadHint.Always tidak menerapkan atribut sama sekali.

Microsoft menggunakan DefaultDependencyAttribute untuk menentukan bahwa pengikatan keras adalah default untuk sejumlah kecil rakitan dalam .NET Framework, seperti mscorlib.dll.

Pemrosesan yang ditangguhkan

Pembuatan gambar asli untuk aplikasi yang sangat besar dapat memakan waktu yang cukup lama. Demikian pula, perubahan pada komponen bersama atau perubahan pada pengaturan komputer mungkin memerlukan banyak gambar asli untuk diperbarui. Tindakan install dan update memiliki /queue opsi yang mengantrekan operasi untuk eksekusi yang ditangguhkan oleh layanan gambar asli. Selain itu, Ngen.exe memiliki queue tindakan dan executeQueuedItems yang memberikan beberapa kontrol atas layanan. Untuk informasi selengkapnya, lihat Native Image Service.

Gambar asli dan kompilasi JIT

Jika Ngen.exe menemukan metode apa pun dalam rakitan yang tidak dapat dihasilkannya, metode tersebut mengecualikannya dari gambar asli. Ketika runtime menjalankan rakitan ini, runtime kembali ke kompilasi JIT untuk metode yang tidak disertakan dalam gambar asli.

Selain itu, gambar asli tidak digunakan jika rakitan telah ditingkatkan, atau jika gambar telah dibatalkan karena alasan apa pun.

Gambar tidak valid

Saat Anda menggunakan Ngen.exe untuk membuat gambar asli rakitan, output bergantung pada opsi baris perintah yang Anda tentukan dan pengaturan tertentu di komputer Anda. Pengaturan ini mencakup hal-hal berikut:

  • Versi .NET Framework.

  • Identitas yang tepat dari rakitan (identitas perubahan kompilasi ulang).

  • Identitas yang tepat dari semua rakitan yang direferensikan perakitan (kompilasi ulang mengubah identitas).

  • Faktor keamanan.

Ngen.exe merekam informasi ini saat menghasilkan gambar asli. Saat Anda menjalankan rakitan, runtime mencari gambar asli yang dihasilkan dengan opsi dan pengaturan yang cocok dengan lingkungan komputer saat ini. Runtime kembali ke kompilasi JIT dari rakitan jika tidak dapat menemukan gambar asli yang cocok. Perubahan berikut pada pengaturan dan lingkungan komputer menyebabkan gambar asli menjadi tidak valid:

  • Versi .NET Framework.

    Jika Anda menerapkan pembaruan ke .NET Framework, semua gambar asli yang telah Anda buat menggunakan Ngen.exe menjadi tidak valid. Untuk alasan ini, semua pembaruan .NET Framework menjalankan Ngen Update perintah, untuk memastikan bahwa semua gambar asli diregenerasi. .NET Framework secara otomatis membuat gambar asli baru untuk pustaka .NET Framework yang diinstalnya.

  • Identitas yang tepat dari assembly.

    Jika Anda mengkompilasi ulang rakitan, gambar asli assembly yang sesuai menjadi tidak valid.

  • Identitas yang tepat dari setiap rakitan referensi perakitan.

    Jika Anda memperbarui rakitan terkelola, semua gambar asli yang secara langsung atau tidak langsung bergantung pada rakitan tersebut menjadi tidak valid dan perlu diregenerasi. Ini termasuk referensi biasa dan dependensi yang terikat secara permanen. Setiap kali pembaruan perangkat lunak diterapkan, program penginstalan harus menjalankan Ngen Update perintah untuk memastikan bahwa semua gambar asli dependen diregenerasi.

  • Faktor keamanan.

    Mengubah kebijakan keamanan mesin untuk membatasi izin yang sebelumnya diberikan ke rakitan dapat menyebabkan gambar asli yang dikompilasi sebelumnya agar perakitan tersebut menjadi tidak valid.

    Untuk informasi terperinci tentang bagaimana runtime bahasa umum mengelola keamanan akses kode dan cara menggunakan izin, lihat Keamanan Akses Kode.

Troubleshooting

Topik pemecahan masalah berikut memungkinkan Anda melihat gambar asli mana yang digunakan dan yang tidak dapat digunakan oleh aplikasi Anda, untuk menentukan kapan pengkompilasi JIT mulai mengkompilasi metode, dan menunjukkan cara menolak kompilasi gambar asli dari metode yang ditentukan.

Penampil Log Pengikatan Rakitan

Untuk mengonfirmasi bahwa gambar asli sedang digunakan oleh aplikasi Anda, Anda dapat menggunakan Fuslogvw.exe (Penampil Log Pengikatan Perakitan). Pilih Gambar Asli dalam kotak Kategori Log pada jendela penampil log pengikatan. Fuslogvw.exe memberikan informasi tentang mengapa gambar asli ditolak.

Asisten penelusuran kesalahan terkelola JITCompilationStart

Anda dapat menggunakan asisten debugging terkelola (MDA) jitCompilationStart untuk menentukan kapan pengkompilasi JIT mulai mengkompilasi fungsi.

Memilih keluar dari pembuatan gambar asli

Dalam beberapa kasus, NGen.exe mungkin mengalami kesulitan menghasilkan gambar asli untuk metode tertentu, atau Anda mungkin lebih suka bahwa metode tersebut dikompilasi JIT daripada dikompilasi ke gambar asli. Dalam hal ini, Anda dapat menggunakan System.Runtime.BypassNGenAttribute atribut untuk mencegah NGen.exe menghasilkan gambar asli untuk metode tertentu. Atribut harus diterapkan satu per satu ke setiap metode yang kodenya tidak ingin Anda sertakan dalam gambar asli. NGen.exe mengenali atribut dan tidak menghasilkan kode dalam gambar asli untuk metode yang sesuai.

Namun, perhatikan bahwa itu BypassNGenAttribute tidak didefinisikan sebagai jenis di Pustaka Kelas .NET Framework. Untuk menggunakan atribut dalam kode Anda, Anda harus terlebih dahulu mendefinisikannya sebagai berikut:

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

Anda kemudian dapat menerapkan atribut berdasarkan per metode. Contoh berikut menginstruksikan Native Image Generator bahwa ia tidak boleh menghasilkan gambar asli untuk metode tersebut ExampleClass.ToJITCompile .

using System;
using System.Runtime;

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

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

Examples

Perintah berikut menghasilkan gambar asli untuk ClientApp.exe, yang terletak di direktori saat ini, dan menginstal gambar di cache gambar asli. Jika ada file konfigurasi untuk rakitan, Ngen.exe menggunakannya. Selain itu, gambar asli dihasilkan untuk file .dll apa pun yang ClientApp.exe mereferensikan.

ngen install ClientApp.exe

Gambar yang diinstal dengan Ngen.exe juga disebut root. Akar dapat berupa aplikasi atau komponen bersama.

Perintah berikut menghasilkan gambar asli untuk MyAssembly.exe dengan jalur yang ditentukan.

ngen install c:\myfiles\MyAssembly.exe

Saat menemukan rakitan dan dependensinya, Ngen.exe menggunakan logika pemeriksaan yang sama yang digunakan oleh runtime bahasa umum. Secara default, direktori yang berisi ClientApp.exe digunakan sebagai direktori dasar aplikasi, dan semua pemeriksaan perakitan dimulai dalam direktori ini. Anda dapat mengambil alih perilaku ini dengan menggunakan /AppBase opsi .

Nota

Ini adalah perubahan dari perilaku Ngen.exe dalam .NET Framework versi 1.0 dan 1.1, di mana basis aplikasi diatur ke direktori saat ini.

Rakitan dapat memiliki dependensi tanpa referensi, misalnya jika memuat file .dll dengan menggunakan Assembly.Load metode . Anda dapat membuat gambar asli untuk file .dll tersebut dengan menggunakan informasi konfigurasi untuk perakitan aplikasi, dengan /ExeConfig opsi . Perintah berikut menghasilkan gambar asli untuk MyLib.dll menggunakan informasi konfigurasi dari MyApp.exe.

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

Rakitan yang diinstal dengan cara ini tidak dihapus ketika aplikasi dihapus.

Untuk menghapus penginstalan dependensi, gunakan opsi baris perintah yang sama yang digunakan untuk menginstalnya. Perintah berikut menghapus instalan MyLib.dll dari contoh sebelumnya.

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

Untuk membuat gambar asli untuk rakitan di cache perakitan global, gunakan nama tampilan rakitan. Contohnya:

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

NGen.exe menghasilkan sekumpulan gambar terpisah untuk setiap skenario yang Anda instal. Misalnya, perintah berikut menginstal sekumpulan gambar asli lengkap untuk operasi normal, set lengkap lain untuk penelusuran kesalahan, dan yang ketiga untuk pembuatan profil:

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

Menampilkan Cache Gambar Asli

Setelah gambar asli diinstal di cache, gambar tersebut dapat ditampilkan menggunakan Ngen.exe. Perintah berikut menampilkan semua gambar asli dalam cache gambar asli.

ngen display

Tindakan ini display mencantumkan semua rakitan akar terlebih dahulu, diikuti oleh daftar semua gambar asli di komputer.

Gunakan nama sederhana rakitan untuk menampilkan informasi hanya untuk rakitan tersebut. Perintah berikut menampilkan semua gambar asli dalam cache gambar asli yang cocok dengan nama MyAssemblyparsial , dependensinya, dan semua akar yang memiliki dependensi pada MyAssembly:

ngen display MyAssembly

Mengetahui akar apa yang bergantung pada rakitan komponen bersama berguna dalam mengukur dampak tindakan update setelah komponen bersama ditingkatkan.

Jika Anda menentukan ekstensi file assembly, Anda harus menentukan jalur atau menjalankan Ngen.exe dari direktori yang berisi assembly:

ngen display c:\myApps\MyAssembly.exe

Perintah berikut menampilkan semua gambar asli dalam cache gambar asli dengan nama MyAssembly dan versi 1.0.0.0.

ngen display "myAssembly, version=1.0.0.0"

Memperbarui Gambar

Gambar biasanya diperbarui setelah komponen bersama ditingkatkan. Untuk memperbarui semua gambar asli yang telah berubah, atau yang dependensinya telah berubah, gunakan update tindakan tanpa argumen.

ngen update

Memperbarui semua gambar bisa menjadi proses yang panjang. Anda dapat mengantrekan pembaruan untuk eksekusi oleh layanan gambar asli dengan menggunakan /queue opsi . Untuk informasi selengkapnya tentang /queue opsi dan prioritas penginstalan, lihat Native Image Service.

ngen update /queue

Menghapus instalan Gambar

Ngen.exe mempertahankan daftar dependensi, sehingga komponen bersama dihapus hanya ketika semua rakitan yang bergantung padanya telah dihapus. Selain itu, komponen bersama tidak dihapus jika telah diinstal sebagai root.

Perintah berikut menghapus semua skenario untuk root ClientApp.exe:

ngen uninstall ClientApp

Tindakan uninstall ini dapat digunakan untuk menghapus skenario tertentu. Perintah berikut menghapus semua skenario debug untuk ClientApp.exe:

ngen uninstall ClientApp /debug

Nota

/debug Menghapus instalasi skenario tidak menghapus instalan skenario yang mencakup dan /profile/debug.

Perintah berikut menghapus semua skenario untuk versi tertentu dari ClientApp.exe:

ngen uninstall "ClientApp, Version=1.0.0.0"

Perintah berikut menghapus instalan semua skenario untuk "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL", atau hanya skenario debug untuk rakitan tersebut:

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

Seperti halnya install tindakan, menyediakan ekstensi memerlukan eksekusi Ngen.exe dari direktori yang berisi rakitan atau menentukan jalur lengkap.

Untuk contoh yang berkaitan dengan layanan gambar asli, lihat Native Image Service.

Tugas Gambar Asli

Tugas gambar asli adalah tugas Windows yang menghasilkan dan memelihara gambar asli. Tugas gambar asli menghasilkan dan merebut kembali gambar asli secara otomatis untuk skenario yang didukung. Ini juga memungkinkan penginstal untuk menggunakan Ngen.exe (Native Image Generator) untuk membuat dan memperbarui gambar asli pada waktu yang ditangguhkan.

Tugas gambar asli didaftarkan sekali untuk setiap arsitektur CPU yang didukung di komputer, untuk memungkinkan kompilasi untuk aplikasi yang menargetkan setiap arsitektur:

Nama tugas Komputer 32-bit Komputer 64-bit
NET Framework NGEN v4.0.30319 Yes Yes
NET Framework NGEN v4.0.30319 64 Tidak. Yes

Tugas gambar asli tersedia di .NET Framework 4.5 dan versi yang lebih baru, saat berjalan pada Windows 8 atau yang lebih baru. Pada versi Windows yang lebih lama, .NET Framework menggunakan Native Image Service.

Masa Pakai Tugas

Secara umum, Penjadwal Tugas Windows memulai tugas gambar asli setiap malam ketika komputer diam. Tugas memeriksa pekerjaan yang ditangguhkan yang diantrekan oleh penginstal aplikasi, permintaan pembaruan gambar asli yang ditangguhkan, dan pembuatan gambar otomatis apa pun. Tugas menyelesaikan item kerja yang luar biasa lalu dimatikan. Jika komputer berhenti menganggur saat tugas sedang berjalan, tugas akan berhenti.

Anda juga dapat memulai tugas gambar asli secara manual melalui antarmuka pengguna Penjadwal Tugas atau melalui panggilan manual ke NGen.exe. Jika tugas dimulai melalui salah satu metode ini, tugas akan terus berjalan ketika komputer tidak lagi menganggur. Gambar yang dibuat secara manual dengan menggunakan NGen.exe diprioritaskan untuk mengaktifkan perilaku yang dapat diprediksi untuk penginstal aplikasi.

Layanan Gambar Asli

Layanan gambar asli adalah layanan Windows yang menghasilkan dan memelihara gambar asli. Layanan gambar asli memungkinkan pengembang untuk menungguhkan penginstalan dan pembaruan gambar asli ke periode ketika komputer diam.

Biasanya, layanan gambar asli dimulai oleh program penginstalan (alat penginstal) untuk aplikasi atau pembaruan. Untuk tindakan prioritas 3, layanan dijalankan selama waktu diam di komputer. Layanan ini menyimpan statusnya dan mampu melanjutkan melalui beberapa boot ulang jika perlu. Beberapa kompilasi gambar dapat diantrekan.

Layanan ini juga berinteraksi dengan perintah Ngen.exe manual. Perintah manual lebih diutamakan daripada aktivitas latar belakang.

Nota

Pada Windows Vista, nama yang ditampilkan untuk layanan gambar asli adalah "Microsoft.NET Framework NGEN v2.0.50727_X86" atau "Microsoft.NET Framework NGEN v2.0.50727_X64". Pada semua versi Microsoft Windows sebelumnya, namanya adalah ".NET Runtime Optimization Service v2.0.50727_X86" atau ".NET Runtime Optimization Service v2.0.50727_X64".

Meluncurkan Operasi Yang Ditangguhkan

Sebelum memulai penginstalan atau peningkatan, disarankan untuk menjeda layanan. Ini memastikan bahwa layanan tidak dijalankan saat alat penginstal menyalin file atau menempatkan rakitan di cache perakitan global. Baris perintah Ngen.exe berikut menjeda layanan:

ngen queue pause

Ketika semua operasi yang ditangguhkan telah diantrekan, perintah berikut memungkinkan layanan dilanjutkan:

ngen queue continue

Untuk menungguhkan pembuatan gambar asli saat menginstal aplikasi baru atau saat memperbarui komponen bersama, gunakan /queue opsi dengan install tindakan atau update . Baris perintah Ngen.exe berikut menginstal gambar asli untuk komponen bersama dan melakukan pembaruan semua akar yang mungkin telah terpengaruh:

ngen install MyComponent /queue
ngen update /queue

Tindakan ini update meregenerasi semua gambar asli yang telah dibatalkan, bukan hanya yang menggunakan MyComponent.

Jika aplikasi Anda terdiri dari banyak akar, Anda dapat mengontrol prioritas tindakan yang ditangguhkan. Perintah berikut mengantre penginstalan tiga akar. Assembly1 diinstal terlebih dahulu, tanpa menunggu waktu diam. Assembly2 juga diinstal tanpa menunggu waktu diam, tetapi setelah semua tindakan prioritas 1 selesai. Assembly3 diinstal ketika layanan mendeteksi bahwa komputer diam.

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

Anda dapat memaksa tindakan antrean terjadi secara sinkron dengan menggunakan executeQueuedItems tindakan . Jika Anda memberikan prioritas opsional, tindakan ini hanya memengaruhi tindakan antrean yang memiliki prioritas yang sama atau lebih rendah. Prioritas default adalah 3, sehingga perintah Ngen.exe berikut segera memproses semua tindakan yang diantrekan, dan tidak kembali hingga selesai:

ngen executeQueuedItems

Perintah sinkron dijalankan oleh Ngen.exe dan tidak menggunakan layanan gambar asli. Anda dapat menjalankan tindakan menggunakan Ngen.exe saat layanan gambar asli sedang berjalan.

Pematian Layanan

Setelah dimulai oleh eksekusi perintah Ngen.exe yang menyertakan /queue opsi , layanan berjalan di latar belakang hingga semua tindakan selesai. Layanan menyimpan statusnya sehingga dapat dilanjutkan melalui beberapa boot ulang jika perlu. Ketika layanan mendeteksi bahwa tidak ada lagi tindakan yang diantrekan, layanan mengatur ulang statusnya sehingga tidak akan memulai ulang saat komputer di-boot, dan kemudian mematikan dirinya sendiri.

Interaksi Layanan dengan Klien

Di .NET Framework versi 2.0, satu-satunya interaksi dengan layanan gambar asli adalah melalui alat baris perintah Ngen.exe. Gunakan alat baris perintah dalam skrip penginstalan untuk mengantrekan tindakan untuk layanan gambar asli dan berinteraksi dengan layanan.

Lihat juga