Pelatihan
Modul
Publish an ASP.NET Core app - Training
Learn how to publish an ASP.NET Core app for deployment to a web server or cloud service.
Browser ini sudah tidak didukung.
Mutakhirkan ke Microsoft Edge untuk memanfaatkan fitur, pembaruan keamanan, dan dukungan teknis terkini.
Waktu dan latensi startup aplikasi .NET dapat ditingkatkan dengan mengkompilasi rakitan aplikasi Anda sebagai format ReadyToRun (R2R). R2R adalah bentuk kompilasi ahead-of-time (AOT).
Biner R2R meningkatkan performa startup dengan mengurangi jumlah pekerjaan yang perlu dilakukan kompilator just-in-time (JIT) sesuai beban aplikasi Anda. Biner berisi kode asli yang serupa dibandingkan dengan apa yang akan dihasilkan JIT. Namun, biner R2R lebih besar karena berisi kode bahasa perantara (IL), yang masih diperlukan untuk beberapa skenario, dan versi asli dari kode yang sama. R2R hanya tersedia saat Anda menerbitkan aplikasi yang menargetkan lingkungan runtime tertentu (RID) seperti Linux x64 atau Windows x64.
Untuk mengkompilasi proyek Anda sebagai ReadyToRun, aplikasi harus diterbitkan dengan properti PublishReadyToRun diatur ke true
.
Ada dua cara untuk memublikasikan aplikasi Anda sebagai ReadyToRun:
Tentukan bendera PublishReadyToRun langsung ke perintah terbitkan dotnet. Lihat penerbitan dotnet untuk detailnya.
dotnet publish -c Release -r win-x64 -p:PublishReadyToRun=true
Tentukan properti dalam proyek.
<PublishReadyToRun>
proyek Anda.<PropertyGroup>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
dotnet publish -c Release -r win-x64
Kompilasi sebelumnya memiliki dampak performa yang kompleks pada performa aplikasi, yang dapat sulit diprediksi. Secara umum, ukuran rakitan akan tumbuh menjadi antara dua hingga tiga kali lebih besar. Peningkatan ukuran fisik file ini dapat mengurangi performa pemuatan rakitan dari disk, dan meningkatkan rangkaian proses yang berfungsi. Namun, sebagai gantinya jumlah metode yang dikompilasi pada run time biasanya berkurang secara substansial. Hasilnya adalah bahwa sebagian besar aplikasi yang memiliki kode dalam jumlah besar menerima manfaat performa besar dari mengaktifkan ReadyToRun. Aplikasi yang memiliki kode dalam jumlah kecil kemungkinan tidak akan mengalami peningkatan signifikan dari mengaktifkan ReadyToRun, karena pustaka runtime .NET telah dikompilasi sebelumnya dengan ReadyToRun.
Peningkatan startup yang dibahas di sini tidak hanya berlaku untuk startup aplikasi, tetapi juga untuk penggunaan pertama kode apa pun dalam aplikasi. Misalnya, ReadyToRun dapat digunakan untuk mengurangi latensi respons penggunaan pertama Api Web dalam aplikasi ASP.NET.
Kode yang dihasilkan sebelumnya tidak terlalu dioptimalkan seperti kode yang dihasilkan oleh JIT. Untuk mengatasi masalah ini, kompilasi berjenjang akan menggantikan metode ReadyToRun yang umum digunakan dengan metode yang dihasilkan JIT.
SDK akan melakukan prakombinasikan rakitan yang didistribusikan dengan aplikasi. Untuk aplikasi mandiri, kumpulan rakitan ini akan menyertakan kerangka kerja. Biner C++/CLI tidak memenuhi syarat untuk kompilasi ReadyToRun.
Untuk mengecualikan rakitan tertentu dari pemrosesan ReadyToRun, gunakan <PublishReadyToRunExclude>
daftar.
<ItemGroup>
<PublishReadyToRunExclude Include="Contoso.Example.dll" />
</ItemGroup>
Kompiler akan mencoba untuk melakukan pra-kompilasi sebanyak mungkin metode. Namun, karena berbagai alasan, tidak diharapkan bahwa menggunakan fitur ReadyToRun akan mencegah JIT dieksekusi. Alasan tersebut dapat mencakup, tetapi tidak terbatas pada:
Saat mengkompilasi aplikasi dengan ReadyToRun, profiler mungkin memerlukan simbol untuk memeriksa file ReadyToRun yang dihasilkan. Untuk mengaktifkan pembuatan simbol, tentukan <PublishReadyToRunEmitSymbols>
properti .
<PropertyGroup>
<PublishReadyToRunEmitSymbols>true</PublishReadyToRunEmitSymbols>
</PropertyGroup>
Simbol-simbol ini akan ditempatkan di direktori penerbitan dan untuk Windows akan memiliki ekstensi file .ni.pdb, dan untuk Linux akan memiliki ekstensi file .r2rmap. File-file ini umumnya tidak didistribusikan ulang ke pelanggan akhir, tetapi biasanya akan disimpan di server simbol. Secara umum simbol ini berguna untuk men-debug masalah performa yang terkait dengan startup aplikasi, karena Kompilasi Bertingkat akan menggantikan kode yang dihasilkan ReadyToRun dengan kode yang dihasilkan secara dinamis. Namun, jika mencoba membuat profil aplikasi yang menonaktifkan Kompilasi Berjenjang, simbol akan berguna.
Kompilasi ReadyToRun normal menghasilkan biner yang dapat dilayani dan dimanipulasi secara individual. Mulai dari .NET 6, dukungan untuk kompilasi Composite ReadyToRun telah ditambahkan. Composite ReadyToRun mengkompilasi sekumpulan rakitan yang harus didistribusikan bersama-sama. Ini memiliki keuntungan bahwa kompilator mampu melakukan pengoptimalan yang lebih baik dan mengurangi serangkaian metode yang tidak dapat dikompilasi melalui proses ReadyToRun. Namun, karena tradeoff, kecepatan kompilasi menurun secara signifikan, dan ukuran file keseluruhan aplikasi meningkat secara signifikan. Karena tradeoff ini, penggunaan Composite ReadyToRun hanya direkomendasikan untuk aplikasi yang menonaktifkan Kompilasi Berjenjang atau aplikasi yang berjalan di Linux yang mencari waktu startup terbaik dengan penyebaran mandiri . Untuk mengaktifkan kompilasi ReadyToRun komposit, tentukan <PublishReadyToRunComposite>
properti .
<PropertyGroup>
<PublishReadyToRunComposite>true</PublishReadyToRunComposite>
</PropertyGroup>
Catatan
Di .NET 6, Composite ReadyToRun hanya didukung untuk penyebaran mandiri .
Untuk beberapa platform SDK, kompilator ReadyToRun mampu mengkompilasi silang untuk platform target lainnya.
Target kompilasi yang didukung dijelaskan dalam tabel di bawah ini saat menargetkan .NET 6 dan versi yang lebih baru.
Platform SDK | Platform target yang didukung |
---|---|
Windows X64 | Windows (X86, X64, Arm64), Linux (X64, Arm32, Arm64), macOS (X64, Arm64) |
Windows X86 | Windows (X86), Linux (Arm32) |
Linux X64 | Linux (X64, Arm32, Arm64), macOS (X64, Arm64) |
Linux Arm32 | Linux Arm32 |
Linux Arm64 | Linux (X64, Arm32, Arm64), macOS (X64, Arm64) |
macOS X64 | Linux (X64, Arm32, Arm64), macOS (X64, Arm64) |
macOS Arm64 | Linux (X64, Arm32, Arm64), macOS (X64, Arm64) |
Target kompilasi yang didukung dijelaskan dalam tabel di bawah ini saat menargetkan .NET 5 ke bawah.
Platform SDK | Platform target yang didukung |
---|---|
Windows X64 | Windows X86, Windows X64, Windows Arm64 |
Windows X86 | Windows X86, Windows Arm32 |
Linux X64 | Linux X86, Linux X64, Linux Arm32, Linux Arm64 |
Linux Arm32 | Linux Arm32 |
Linux Arm64 | Linux Arm64 |
macOS X64 | macOS X64 |
Umpan balik .NET
.NET adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik:
Pelatihan
Modul
Publish an ASP.NET Core app - Training
Learn how to publish an ASP.NET Core app for deployment to a web server or cloud service.