Pada tanggal 14 November, Microsoft merilis .NET 8 dengan sejumlah fitur dan penyempurnaan baru. Artikel ini akan membahas sorotan utama dari .NET 8, menurut sudut pandang saya, dan akan mencakup beberapa contoh kode untuk memandu Anda memulai dengan fitur-fitur baru tersebut.
Untuk menggunakan contoh kode yang disediakan dalam artikel ini, Anda harus memiliki Visual Studio 2022 terinstal di sistem Anda. Jika Anda belum memiliki salinan, Anda dapat mengunduh Visual Studio 2022 di sini.
Membuat Proyek Aplikasi Konsol .NET Core di Visual Studio
Pertama-tama, mari buat proyek aplikasi konsol .NET Core di Visual Studio. Dengan asumsi Visual Studio 2022 terinstal di sistem Anda, ikuti langkah-langkah berikut untuk membuat proyek aplikasi konsol .NET Core baru.
- Buka Visual Studio IDE.
- Klik “Create new project.”
- Pada jendela “Create new project,” pilih “Console App (.NET Core)” dari daftar template yang ditampilkan.
- Klik Next.
- Pada jendela “Configure your new project,” tentukan nama dan lokasi untuk proyek baru.
- Klik Next.
- Pada jendela “Additional information” yang ditampilkan selanjutnya, pilih “.NET 8.0” sebagai versi framework yang ingin Anda gunakan.
- Klik Create.
Proyek aplikasi konsol .NET Core ini akan kita gunakan untuk menjelajahi fitur-fitur terbaik dari .NET 8 pada bagian-bagian berikutnya dari artikel ini.
Peningkatan Garbage Collector
Garbage collector (.NET GC) sekarang memungkinkan Anda menyesuaikan batas memori secara dinamis untuk aplikasi cloud-native, khususnya yang berjalan di Kubernetes. Fitur ini akan sangat membantu dalam skenario di mana layanan di-hosting di lingkungan cloud.
Untuk memanfaatkan fitur ini, panggil API RefreshMemoryLimit():
GC.RefreshMemoryLimit();
Berikut adalah contoh kode yang menunjukkan bagaimana Anda dapat menyegarkan pengaturan GC terkait batas memori.
AppContext.SetData("GCHeapHardLimit", (ulong)100 * 1_024 * 1_024);
GC.RefreshMemoryLimit();
Peningkatan JSON
Beberapa penyempurnaan telah dilakukan pada fungsi serialisasi dan deserialisasi JSON di .NET. Ini termasuk dukungan untuk floating-point hardware dan dukungan untuk jenis numerik baru seperti half structs.
Selain itu, ketika mendeserialisasi data dalam versi sebelumnya dari .NET, properti apa pun dalam payload JSON Anda yang bukan tipe POCO akan diabaikan. Dengan .NET 8, Anda dapat membuat semua anggota data tersedia dalam payload JSON.
Untuk memanfaatkan fungsionalitas baru ini, Anda harus memberi anotasi tipe POCO Anda dengan atribut System.Text.Json.Serialization.JsonUnmappedMemberHandlingAttribute, seperti yang ditunjukkan dalam potongan kode berikut.
[JsonUnmappedMemberHandling(JsonUnmappedMemberHandling.Disallow)]
public class Employee
{
public int Employee_Id { get; set; }
}
Sekarang, jika Anda mendeserialisasi instansi kelas Employee yang menentukan nama anggota yang bukan bagian dari tipe POCO, JsonException akan dilemparkan. Contohnya:
JsonSerializer.Deserialize<Employee>("{"Employee_Id" : 1, "Department_Id" : 1 }");
Berikut adalah pesan pengecualian yang akan Anda lihat ketika kode di atas dijalankan:
// JsonException : The JSON property 'Department_Id' could not be mapped to
// any .NET member contained in type 'Employee'.
Abstraksi Waktu
Kelas TimeProvider dan antarmuka ITimer yang baru ditambahkan menyediakan fungsionalitas abstraksi waktu, memungkinkan Anda mem-mock waktu dalam skenario pengujian. Fungsionalitas abstraksi waktu ini mendukung:
- Membuat instansi timer baru
- Mengambil waktu lokal atau waktu UTC
- Mengambil timestamp untuk mengukur kinerja
Kelas abstrak TimeProvider dirancang untuk dapat terintegrasi dengan kerangka pengujian, menyediakan metode-metode yang memfasilitasi pengujian yang mulus dan komprehensif dari semua aspeknya.
Peningkatan Kriptografi
Seiring dengan penyebaran ancaman siber secara global, dukungan baru untuk SHA-3 membuat aplikasi .NET 8 lebih aman, menyediakan alternatif untuk SHA-2. Juga di .NET 8, operasi RSA ephemeral telah dipindahkan ke bcrypt.dll daripada ncrypt.dll, menghindari kebutuhan untuk membuat panggilan prosedur jarak jauh ke lsass.exe.
Tipe System.Security.Cryptography.RandomNumberGenerator di .NET 8 memperkenalkan berbagai metode untuk menggunakan keacakan. Metode-metode ini termasuk metode GetItems() untuk memilih item secara acak dari himpunan input dan metode Shuffle() untuk mengurangi bias pelatihan dalam pembelajaran mesin.
Peningkatan Kompresi
Kompresi file dari direktori menggunakan aliran (stream) kini mungkin tanpa perlu menyimpannya di cache. Ini memungkinkan pengelolaan memori langsung dari hasil kompresi. Saat ruang disk terbatas, API ini menjadi berguna karena menghilangkan kebutuhan untuk operasi disk yang bersifat perantara.
Namespace System.IO.Compression sekarang mencakup beberapa API sebagai bagian dari kelas ZipFile, seperti yang ditunjukkan di bawah ini.
namespace System.IO.Compression;
public static partial class ZipFile
{
public static void CreateFromDirectory(string sourceDirectoryName, Stream destination);
public static void CreateFromDirectory(string sourceDirectoryName, Stream destination, CompressionLevel compressionLevel, bool includeBaseDirectory);
// ...
}
Peningkatan Kompilasi Native AOT
Dukungan untuk kompilasi native ahead-of-time (AOT) pertama kali diperkenalkan di .NET 7. Dengan .NET 8, Microsoft menambahkan dukungan AOT native untuk arsitektur x64 dan Arm64 pada macOS, dan secara signifikan mengurangi ukuran aplikasi AOT native yang berjalan di Linux.
Peningkatan Generasi Kode
Dengan .NET 8, Microsoft juga melakukan sejumlah peningkatan pada generasi kode dan kompilasi just-in-time (JIT):
- Peningkatan kinerja aplikasi yang di-containerize di lingkungan cloud-native
- Peningkatan SIMD untuk paralelisme yang lebih baik
- Peningkatan optimasi berpanduan profil (PGO)
- PGO dinamis secara default
- Peningkatan kinerja untuk arsitektur Arm64
- Peningkatan JIT untuk generasi kode yang lebih cepat
Peningkatan Kinerja Lainnya
Kinerja adalah area yang semakin menjadi fokus Microsoft dalam rilis terbaru .NET. Berikut adalah beberapa peningkatan kinerja kunci lainnya di .NET 8.
Peningkatan List.AddRange(IEnumerable)
Metode AddRange(IEnumerable) telah direfaktor dan ditingkatkan untuk kinerja yang lebih baik ketika urutan bukan ICollection.
Peningkatan Int32.ToString()
Metode Int32.ToString() telah ditingkatkan untuk kinerja yang lebih baik dengan menyimpan nilai string di memori.
Pengenalan Namespace System.Collections.Frozen
System.Collections.Frozen memperkenalkan dua kelas koleksi baru, FrozenSet dan FrozenDictionary. Kata “Frozen” di sini menunjukkan bahwa koleksi-koleksi ini bersifat tidak dapat diubah setelah suatu instance dari kelas-kelas ini telah dibuat. Koleksi-koleksi baru ini memungkinkan Anda melakukan pencarian dan enumerasi lebih cepat dengan menggunakan metode-metode seperti TryGetValue() dan Contains().
Contoh kode berikut menggambarkan bagaimana Anda dapat menggunakan FrozenSet.
using System.Collections.Frozen;
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
FrozenSet<int> frozenSet = numbers.ToFrozenSet();
foreach (int i in frozenSet)
Console.WriteLine(i);
Console.ReadLine();
Ketika Anda menjalankan potongan kode di atas, semua elemen dari array integer akan ditampilkan di jendela konsol.
Bacaan Tambahan
Berikut adalah beberapa sumber daya online yang dapat Anda cek untuk mendapatkan informasi tambahan tentang .NET 8:
- Microsoft Learn: Situs web Microsoft Learn memiliki halaman web yang mencakup semua fitur baru dan yang ditingkatkan di .NET 8.
- Dokumentasi GitHub: Anda juga dapat menemukan informasi tentang fitur baru di .NET 8 di repositori GitHub untuk dokumentasi .NET dan .NET Core.
- Situs web .NET: Situs web resmi Microsoft .NET memiliki halaman web di mana Anda dapat menemukan lebih banyak detail tentang .NET 8.
- Blog dan Forum Komunitas .NET: Anda mungkin ingin menjelajahi blog dan forum komunitas di mana pengembang berbagi pengalaman dan wawasan mereka mengenai fitur-fitur dan pembaruan di .NET. Platform-platform ini bagus untuk menemukan diskusi tentang apa yang baru dalam rilis tertentu dari .NET.
Rilis .NET 8 dari Microsoft adalah lonjakan besar dalam membangun aplikasi yang scalable, secure, robust, dan performant. Dengan rilis .NET 8, C# 12 juga telah tersedia. Saya akan menulis posting tentang fitur-fitur baru C# 12 di sini segera.