WEBSITE ĐANG PHÁT TRIỂN

.NET 9 - tính năng mới và ảnh hưởng thực tế đến dự án của bạn

.NET 9 mang nhiều cải tiến về performance, LINQ, JSON, và C# 13 syntax. Bài này không list hết changelog - mà focus vào những thứ thực sự ảnh hưởng đến code hàng ngày và khi nào nên upgrade.

Vấn đề với "release note articles"

Mỗi khi .NET release, có hàng chục bài "X tính năng mới trong .NET Y". Vấn đề là hầu hết chỉ dịch lại changelog mà không trả lời câu hỏi thực sự của developer: "Điều này ảnh hưởng thế nào đến project đang chạy của tôi?"

Bài này tiếp cận khác - chúng tôi chọn lọc những gì thực sự quan trọng và giải thích impact cụ thể.


1. Performance improvements - không cần đổi code

Đây là loại improvement tốt nhất: bạn không cần làm gì, hệ thống tự nhanh hơn.

.NET 9 benchmarks (từ Microsoft):

  • Throughput tăng 15-18% trong một số workloads
  • GC improvements: giảm pause time trong server GC
  • JIT improvements: better inlining, better SIMD vectorization

Điều này có nghĩa là gì với bạn:

Upgrade .NET runtime (không nhất thiết phải upgrade code) thường cho free performance improvement. Với production apps có traffic cao, điều này rất đáng.


2. LINQ improvements - thực sự useful

CountBy và AggregateBy

// .NET 8 và trước - verbose
var wordCounts = text.Split(' ')
    .GroupBy(w => w.ToLower())
    .ToDictionary(g => g.Key, g => g.Count());

// .NET 9 - cleaner
var wordCounts = text.Split(' ')
    .CountBy(w => w.ToLower());
// Returns IEnumerable<KeyValuePair<string, int>>
// AggregateBy - aggregate theo key
var orderTotalsByCustomer = orders
    .AggregateBy(
        keySelector: o => o.CustomerId,
        seed: 0m,
        func: (total, order) => total + order.Amount
    );

Impact: Code LINQ dễ đọc hơn, ít allocations hơn so với GroupBy().ToDictionary() pattern.

Index() method

// .NET 8
foreach (var (index, item) in items.Select((item, i) => (i, item)))
{
    Console.WriteLine($"{index}: {item}");
}

// .NET 9 - clean hơn
foreach (var (index, item) in items.Index())
{
    Console.WriteLine($"{index}: {item}");
}

3. System.Text.Json improvements

Serialization của ReadOnlySpan và ReadOnlySpan

Relevant với high-performance scenarios:

// .NET 9: Serialize thẳng từ span - không copy
ReadOnlySpan<byte> rawJsonBytes = GetRawBytes();
var obj = JsonSerializer.Deserialize<MyType>(rawJsonBytes);

JsonSchemaExporter - mới và useful

// Generate JSON Schema từ C# type - useful cho API documentation
var schema = JsonSchemaExporter.GetJsonSchemaAsNode(
    typeof(CreateOrderRequest),
    new JsonSerializerOptions { WriteIndented = true }
);

Console.WriteLine(schema.ToJsonString(new JsonSerializerOptions { WriteIndented = true }));
// Output: JSON Schema cho CreateOrderRequest

4. C# 13 - syntax mới

params collections

// Trước: chỉ work với array
void LogMessages(params string[] messages) { }

// C# 13: work với bất kỳ collection type
void LogMessages(params IEnumerable<string> messages) { }
void LogMessages(params List<string> messages) { }
void LogMessages(params ReadOnlySpan<string> messages) { } // Zero-allocation!

Lock object với System.Threading.Lock

// Trước
private readonly object _lock = new();
lock (_lock) { /* ... */ }

// C# 13 - dedicated Lock type với better tooling support
private readonly Lock _lock = new();
lock (_lock) { /* ... */ }
// Lock.EnterScope() cho using pattern
using (_lock.EnterScope()) { /* ... */ }

5. Hybrid Cache - thực sự quan trọng

.NET 9 giới thiệu HybridCache - replacement cho IMemoryCache + IDistributedCache pattern:

// Program.cs
builder.Services.AddHybridCache(options =>
{
    options.MaximumPayloadBytes = 1024 * 1024;          // 1MB max per entry
    options.DefaultEntryOptions = new HybridCacheEntryOptions
    {
        Expiration = TimeSpan.FromHours(1),              // L2 (distributed) TTL
        LocalCacheExpiration = TimeSpan.FromMinutes(5)   // L1 (memory) TTL
    };
});

// Usage
public class ProductService
{
    private readonly HybridCache _cache;

    public async Task<Product> GetProductAsync(int id, CancellationToken ct = default)
    {
        return await _cache.GetOrCreateAsync(
            key: $"product:{id}",
            factory: async cancel => await _repository.GetByIdAsync(id, cancel),
            cancellationToken: ct
        );
    }
}

Tại sao quan trọng:

HybridCache có built-in stampede protection - khi cache miss, chỉ một request đi xuống database, các requests khác chờ kết quả. Cực kỳ useful cho high-traffic endpoints.


Khi nào nên upgrade?

Scenario Recommendation
New project Dùng .NET 9 ngay
Project .NET 8 đang chạy ổn Upgrade vào sprint tiếp theo - low risk
Project .NET 6/7 Test kỹ trước - có một số breaking changes
Legacy .NET Framework Chưa cần migrate - đây là câu chuyện khác

.NET 9 là Standard Term Support (STS) - support đến 12/2026. Nếu cần Long Term Support, chờ .NET 10 (dự kiến 11/2026).


Kết

.NET 9 không phải bản release "wow" nhất, nhưng có nhiều improvements thực chất - đặc biệt HybridCache và performance. Với project đang chạy .NET 8, upgrade là low-risk và đáng làm.

Tham khảo

  • What's new in .NET 9: learn.microsoft.com/dotnet/core/whats-new/dotnet-9
  • .NET 9 announcement: devblogs.microsoft.com/dotnet

BKGlobal Tech Team


Bài viết liên quan

Xem thêm
Tool & Platform mới cho Developer

Trae IDE: ByteDance's Free AI IDE — Đối thử miễn phí của Cursor

Trae IDE là AI IDE hoàn toàn miễn phí từ ByteDance, công ty đứng sau TikTok. Built trên VS Code, tích hợp Claude 4.5 Sonnet, GPT-5o, và mới nhất là Grok. Miễn phí hoàn toàn — tất cả AI features, không có paywall. Nhưng có một "nhưng" lớn về privacy.

Tool & Platform mới cho Developer

OpenCode: Open-source Terminal Agent 95K Stars — Provider-agnostic AI Coding

OpenCode là open-source terminal agent phổ biến nhất trên GitHub với 95K stars, hỗ trợ 75+ AI models từ nhiều providers. Miễn phí với built-in free models, hoặc BYOK với API key bạn chọn. Đây là lowest-friction entry point cho developers muốn thử terminal agents.

Tool & Platform mới cho Developer

OpenAI Codex CLI: Terminal Agent quay lại cuộc chơi 2026

OpenAI Codex CLI re-entered cuộc trò chuyện đầu 2026 với parallel sandboxed execution và automatic PR creation. 3% adoption (trước khi desktop app launch), nhưng đang tăng. Strong choice nếu bạn đã ở trong OpenAI ecosystem và muốn terminal-first AI agent.