Derniers tips / Mémos
Modélise nativement « exactement l'un de ces types », avec un switch exhaustif vérifié par le compilateur.
Fin des state machines générées par le compilateur : moins d'allocations et des stack traces enfin lisibles.
Recherche sémantique directement dans SQL Server 2025, sans base vectorielle séparée, en LINQ typé.
Framework UI cross-platform pour .NET : Windows, macOS, Linux, iOS, Android et WebAssembly.
Découvrez les nouvelles APIs asynchrones pour la compression ZIP et les améliorations de performance dans .NET 10
Améliorations des API Zip et GZip asynchrones dans .NET 10
.NET 10 introduit de nouvelles APIs asynchrones pour travailler avec les archives ZIP et améliore significativement les performances des opérations de compression et décompression, notamment pour les archives volumineuses et les flux GZip concaténés.
Améliorations majeures
Nouvelles méthodes async pour les opérations non-bloquantes
Meilleures performances I/O asynchrones et parallélisation de l'extraction
Support optimisé des flux GZip concaténés
Utilisation mémoire réduite et meilleur recyclage des buffers
Aucun changement cassant - le code existant bénéficie automatiquement des optimisations
Nouvelles APIs asynchrones
.NET 10 ajoute plusieurs méthodes asynchrones très attendues :
ZipArchive.CreateAsync()ZipFile.CreateFromDirectoryAsync()ZipFile.ExtractToDirectoryAsync()ZipFile.OpenAsync()ZipFile.OpenReadAsync()ZipArchiveEntry.OpenAsync()ZipFileExtensions.CreateEntryFromFileAsync()ZipFileExtensions.ExtractToDirectoryAsync()ZipFileExtensions.ExtractToFileAsync()
Exemples d'utilisation
Extraction asynchrone d'une archive ZIP
Le code ci-dessous fonctionne beaucoup plus rapidement sur .NET 10 grâce aux optimisations internes :
using System;
using System.IO;
using System.IO.Compression;
using System.Threading;
using System.Threading.Tasks;
public static class ZipExtractor
{
public static async Task ExtractZipAsync(
string zipPath,
string destination,
CancellationToken ct = default)
{
Directory.CreateDirectory(destination);
await using var fs = File.OpenRead(zipPath);
using var archive = new ZipArchive(fs, ZipArchiveMode.Read, leaveOpen: false);
foreach (var entry in archive.Entries)
{
// Skip directory entries
if (string.IsNullOrEmpty(entry.Name))
continue;
string outPath = Path.Combine(destination, entry.FullName);
Directory.CreateDirectory(Path.GetDirectoryName(outPath)!);
await using var entryStream = entry.Open();
await using var outStream = File.Create(outPath);
// Asynchronous copy avoids blocking the calling thread
await entryStream.CopyToAsync(outStream, ct);
Console.WriteLine($"Extracted: {entry.FullName}");
}
}
}
// Usage
await ZipExtractor.ExtractZipAsync("sample.zip", "./out", CancellationToken.None);Création asynchrone d'une archive ZIP
Créer une archive ZIP de manière asynchrone à partir d'un répertoire :
using System.IO.Compression;
using System.Threading;
using System.Threading.Tasks;
public static class ZipCreator
{
public static async Task CreateZipFromDirectoryAsync(
string sourceDirectory,
string zipPath,
CancellationToken ct = default)
{
// New async API in .NET 10
await ZipFile.CreateFromDirectoryAsync(
sourceDirectory,
zipPath,
CompressionLevel.Optimal,
includeBaseDirectory: false,
ct);
}
}
// Usage
await ZipCreator.CreateZipFromDirectoryAsync("./source", "archive.zip");Lecture de fichiers GZip concaténés
GZip peut contenir plusieurs membres concaténés. .NET 10 gère cela plus efficacement :
using System;
using System.IO;
using System.IO.Compression;
using System.Text;
using System.Threading.Tasks;
async Task ReadConcatenatedGzipAsync(string path)
{
await using var fileStream = File.OpenRead(path);
await using var gzip = new GZipStream(fileStream, CompressionMode.Decompress);
using var reader = new StreamReader(gzip, Encoding.UTF8);
string content = await reader.ReadToEndAsync();
Console.WriteLine(content);
}
// Works even if the file contains multiple gzip members concatenated
await ReadConcatenatedGzipAsync("data.gz");Détection intelligente des limites des membres GZip, overhead réduit lors de la lecture de plusieurs blocs, et meilleures performances en lecture asynchrone.
Avantages
Meilleures performances sans modification de code
Support complet des opérations asynchrones
Support des CancellationToken pour annuler les opérations longues
Applications plus réactives avec les opérations I/O-bound
Traitement efficace des grandes archives
Points clés
Aucun changement d'API cassant
Optimisations automatiques en ciblant .NET 10
I/O asynchrone amélioré, moins de blocages
Extraction parallélisée pour les archives contenant de nombreux fichiers
Support natif amélioré des fichiers GZip multi-membres