Apa yang baru dalam Microsoft .NET 5

Calon pelepasan kedua Microsoft .NET 5 tiba pada 13 Oktober, menjadikan penggabungan .NET Framework dan .NET Core selangkah lebih dekat untuk diselesaikan. Platform NET bersatu yang baru dijadualkan untuk ketersediaan umum pada 10 November 2020. 

Microsoft menggambarkan Release Candidate 2 sebagai pelepasan hampir akhir dan terakhir dari dua RC. RC awal diterbitkan pada 13 September. Calon pelepasan .NET 5.0 boleh dimuat turun dari dotnet.microsoft.com.

Matlamat tahap tinggi untuk .NET 5 termasuk menyediakan pengalaman .NET SDK yang disatukan, dengan satu BCL (pustaka kelas asas) di semua aplikasi .NET 5, dan dengan sokongan untuk kedua-dua aplikasi asli dan web di pelbagai sistem operasi. Satu projek aplikasi asli .NET 5 akan menyokong sasaran seperti Windows, Microsoft Duo (Android), dan Apple iOS menggunakan kawalan asli pada platform tersebut.

Matlamat tambahan .NET 5 merangkumi sokongan untuk membina aplikasi awan berprestasi tinggi, algoritma yang lebih pantas dalam BCL, sokongan yang lebih baik untuk kontena pada waktu proses, dan sokongan untuk HTTP3. .NET 5.0 merangkumi sokongan untuk format binari WebAss Assembly, melalui runtime Mono dan perpustakaan .NET. Satu set anotasi jenis rujukan yang tidak dapat dilupakan juga ditampilkan.

.NET 5 juga berjanji untuk membolehkan pembangun mencari bug laten secara automatik dalam kod. Ciri-ciri baru yang lain termasuk Halfjenis, titik terapung binari yang menempati 16 bit, dan pemangkasan pemasangan, yang memotong pemasangan yang tidak digunakan untuk mengurangkan ukuran aplikasi. Pemangkasan yang disesuaikan juga diserlahkan. Pemadanan corak baru di C # 9 merangkumi pola jenis relasional, logik, dan sederhana. Pilihan penyebaran ClickOnce kini disokong untuk aplikasi .NET 5.0 Windows dan aplikasi .NET Core 3.1.

Platform .NET yang baru juga menjanjikan peningkatan prestasi. Buletin yang berkaitan dengan Pratonton 7, yang tiba pada 21 Julai, mengakui sekitar 250 permintaan tarikan berorientasikan prestasi di .NET 5 dan menyatakan bahawa kejutan yang menyenangkan tersedia bagi mereka yang telah mengikuti prestasi .NET Core. 

Penambahan dan penambahbaikan lain yang dinyatakan dalam buletin .NET 5 Preview 7:

  • API JSON System.text.json yang baru menyediakan kemampuan untuk mengabaikan nilai lalai untuk sifat jenis nilai semasa membuat siri, berguna untuk mengurangkan siri dan kos wayar. Ini adalah perubahan yang mematikan. Juga ditambahkan untuk System.text.json adalah kemampuan untuk menangani rujukan pekeliling ketika bersiri, dengan bentuk API yang kini diharapkan menjadi final.
  • Pengumpulan sampah kini memaparkan data terperinci mengenai koleksi terbaru, menggunakan GetGCMemoryInfokaedah, yang mengembalikan GCMemoryInfostruktur. GCMemoryInfomenyajikan maklumat mengenai memori mesin dan timbunan dan koleksi terbaru, atau koleksi terbaru dari jenis GC yang ditentukan - sekejap, sekatan penuh, atau latar belakang. Kes penggunaan yang paling mungkin untuk API ini adalah log / pemantauan atau untuk menunjukkan kepada pengimbang beban bahawa mesin harus dikeluarkan dari putaran untuk meminta GC penuh. Perubahan GC yang lain, sementara itu, dibuat untuk menangguhkan operasi memori tetapan semula yang mahal ke situasi memori rendah.
  • Ryujit, penjana kod pemasangan untuk .NET, memperoleh penambahbaikan mulai dari memungkinkan pemantauan beberapa pemeriksaan sempadan hingga penambahbaikan penambahbaikan dan penambahbaikan untuk penghapusan init sifar yang berlebihan. Juga terdapat dalam Ryujit adalah intrinsik perkakasan ARM64 dan pengoptimuman API.

.NET 5 Preview 6, yang dikeluarkan pada 25 Jun, membuang sokongan terpasang untuk WinRT (Windows Runtime), kumpulan API untuk membina aplikasi Platform Windows Universal. Ini adalah perubahan yang mematikan; Aplikasi NET Core 3.x menggunakan WinRT mesti dikompilasi semula. Pasukan .NET dan Windows telah berusaha untuk mengubah cara WinRT berfungsi dengan Windows, menggantikan sokongan WinRT dengan rantai alat C # / WinRT di .NET 5. C # / WinRT adalah alat pemaket NuGet yang menawarkan sokongan unjuran WinRT untuk C #.

Perubahan lain dalam. NET 5 Pratonton 6: 

  • SDK .NET 5 Preview 6 merangkumi sokongan untuk Borang Windows pada peranti Windows ARM64. Kerja berterusan untuk menambahkan sokongan untuk Windows Presentation Foundation pada Windows ARM64.
  • Peningkatan kualiti kod RyuJIT merangkumi pengendalian struktur dan pengoptimuman untuk menghilangkan inisialisasi sifar yang berlebihan. Juga, kemajuan telah dicapai dalam pengoptimuman intrinsik perkakasan ARM64 serta meningkatkan kod yang dihasilkan untuk ARM64, dengan ukuran kod dikurangkan.
  • Pelan sokongan platform telah dikemas kini.

.NET 5 Preview 5, dikeluarkan pada 10 Jun, mengandungi ciri-ciri baru berikut:

  • Penyusun RyuJIT JIT mempunyai pelaksanaan pembantu tailcall yang lebih pantas dan mudah alih. JIT meminta waktu runtime untuk mendapatkan bantuan apabila menyedari ia memerlukan pembantu untuk melakukan tailcall. Juga untuk RyuJIT, terdapat kemajuan yang berterusan dalam pelaksanaan intrinsik perkakasan ARM64. Penambahbaikan lain dalam RyuJIT melibatkan kepantasan yang lebih baik dalam kes yang mempengaruhi penyusunan ekspresi biasa dan peningkatan prestasi seni bina Intel.
  • Eksport untuk binari asli dengan panggilan ke kod .NET telah diaktifkan. Blok asas kemampuan ini adalah sokongan API untuk UnManagedCallersOnlyAttribute. Projek eksport asli membolehkan pendedahan eksport asli asli. Ia tidak memerlukan teknologi interop peringkat lebih tinggi seperti COM dan bersifat lintas platform.
  • DirectoryServices.Protocols sokongan diperluas ke Linux dan MacOS.
  • Pengedaran Linux Alpine 3.12 kini disokong.

Calon pelepasan .NET 5.0 boleh dimuat turun dari dot.net.microsoft.com.

.NET 5 Preview 4, yang dikeluarkan pada 19 Mei, memperkenalkan keupayaan baru berikut:

  • Sokongan bahasa C # 9 dan F # 5.
  • Peningkatan prestasi tailcalls yang digunakan oleh F #.
  • Prestasi yang lebih baik daripada ToUpperInvariant, string.ToLowerInvariant, dan corak yang berkaitan.
  • Peningkatan prestasi HTTP 1.1 dan HTTP 2.
  • Mekanisme pengiraan panggilan yang lebih baik.
  • Perluasan dinamik kamus generik dalaman untuk menghilangkan tebing prestasi yang terkena kod generik.
  • Tumpukan objek yang disematkan untuk mengurangkan pecahan timbunan.
  • Aplikasi fail tunggal berdasarkan jenis penerbitan fail tunggal baru yang melaksanakan aplikasi dari binari tunggal.

Peningkatan dalam pratonton .NET 5 3, yang dilancarkan pada 23 April, merangkumi yang berikut: 

  • Kelas BitArray untuk menguruskan pelbagai nilai bit telah dikemas kini untuk merangkumi pelaksanaan dipercepat perkakasan untuk ARM64 menggunakan intrinsik ARM64. Peningkatan prestasi BitArray sangat ketara, kata Microsoft. Sebagai tambahan, penggantian On Stack (OSR) di CLR dilaksanakan untuk membolehkan kod yang dijalankan dengan metode yang sedang berjalan diubah di tengah-tengah pelaksanaan metode, sementara metode tersebut aktif "di tumpukan." Keupayaan ini, untuk meningkatkan ciri-ciri prestasi kompilasi berjenjang, kini menjadi ciri eksperimen, opt-in pada x64. Peningkatan lain untuk RyuJIT meningkatkan kualiti kod untuk struktur sebagai argumen dalam panggilan kedudukan "ekor panggilan". RyuJIT juga diharapkan dapat menawarkan prestasi generik yang lebih baik. 
  • Penambahan sokongan untuk memelihara rujukan telah ditambahkan ke System.Txt.Json, yang membolehkan pengendalian gelung rujukan untuk serialisasi JSON. Juga, kelas dan struktur yang tidak berubah kini disokong untuk JsonSerializer. Juga disokong sekarang adalah pengendalian nilai nol.
  • SDK .NET sekarang akan secara automatik merujuk pakej NETFramework.ReferenceAssemblies NuGet yang diberi kerangka sasaran .NET Framework dalam fail projek. Perubahan ini membolehkan pembinaan projek .NET Framework pada mesin tanpa pek sasaran .NET Framework dipasang. Peningkatan ini khusus untuk mensasarkan paket dan tidak memperhitungkan kemungkinan kebergantungan projek lain.

Peningkatan khusus dalam. NET 5 preview 2, yang dikeluarkan pada 2 April, termasuk: 

  • Sejumlah perubahan telah dilakukan kepada RyuJIT untuk meningkatkan kualiti kod mesin yang dihasilkan, termasuk inisialisasi sifar pendua yang dihapuskan dengan lebih agresif dan pengoptimuman kotak yang tidak dapat ditolak yang dipanggil sebelumnya.
  • Pengumpulan sampah pelayan pada benang yang berlainan kini dapat dicuri sambil menandakan objek gen0 / 1 yang dipegang langsung oleh objek generasi yang lebih tua. Kerja mencuri benang memendekkan jeda GC sementara untuk senario di mana beberapa utas GC memerlukan masa yang lebih lama untuk ditandai daripada yang lain. Selain itu, bagian dari fitur Pinned Object Heap (POH) telah diimplementasikan, bagian internal untuk pengumpulan sampah, untuk memungkinkan pengumpul menguruskan objek yang disematkan secara terpisah. Ini mengelakkan kesan negatif objek yang disematkan pada timbunan generasi.

Pratonton 1, yang dikeluarkan pada 16 Mac, merangkumi peningkatan prestasi ekspresi biasa serta peningkatan kualiti kod di RyuJIT.

Dijadualkan sebagai pelepasan produksi pada bulan November 2020, .NET 5 akan menyertakan:

  • ASP.NET Core, kerangka sumber terbuka untuk aplikasi web.
  • Teknologi capaian data Entity Framework Core.
  • WinForms.
  • WPF (Windows Presentation Foundation).
  • Model peranti aplikasi mudah alih Xamarin.
  • ML.NET.

Microsoft mengatakan bahawa .NET 5 akan menyediakan satu platform bersatu untuk membina semua jenis aplikasi. Syarikat ini mengarahkan separuh trafik ke trafik laman web .NET ke versi .NET 5 sebagai kes ujian, menggunakan pengimbang beban Azure. 

Microsoft mengesyorkan agar pembangun membina aplikasi baru dengan .NET Core 3.1 dan kemudian memindahkannya ke .NET 5. Syarikat menyatakan bahawa aplikasi .NET Framework boleh ditinggalkan di .NET Framework, yang akan tetap disokong selama Windows itu sendiri disokong.