Regex und Logging mit Source Generators in .NET 6

Regex und Logging mit Source Generators in .NET 6

10 Apr 2023 - Matthias Voigt

Mit .NET 6 hat Microsoft die Nutzung von Source Generators weiter ausgebaut und um nützliche Funktionen wie Regex Source Generators und Logging Source Generators erweitert. Diese neuen Features bieten Entwicklern leistungsstarke Werkzeuge, um die Effizienz und Lesbarkeit ihres Codes zu verbessern. In diesem Artikel werfen wir einen Blick auf diese beiden neuen Features und wie sie in der Praxis eingesetzt werden können.

Regex Source Generators

Regex Source Generators ermöglichen es, reguläre Ausdrücke zur Kompilierzeit zu generieren und zu optimieren. Dies kann die Leistung von Anwendungen erheblich verbessern, da der reguläre Ausdruck nicht mehr zur Laufzeit kompiliert werden muss.

Beispiel: Verwendung von Regex Source Generators

Um einen Regex Source Generator zu verwenden, muss die System.Text.RegularExpressions.Generators-Bibliothek eingebunden werden:

using System.Text.RegularExpressions;

[RegexGenerator(@"^\d{4}-\d{2}-\d{2}$")]
public partial class DateRegex : Regex
{
}

In diesem Beispiel wird ein Regex Source Generator verwendet, um einen regulären Ausdruck für das Format YYYY-MM-DD zu erstellen. Der Generator erstellt eine kompilierte Version des regulären Ausdrucks, die zur Laufzeit verwendet werden kann.

Vorteile

  • Leistungssteigerung: Kompilierung zur Laufzeit entfällt, was die Ausführung beschleunigt.
  • Kompilierungszeit-Fehler: Fehler im regulären Ausdruck werden bereits zur Kompilierungszeit erkannt.

Logging Source Generators

Logging Source Generators bieten eine effiziente Möglichkeit, Logging in .NET-Anwendungen zu implementieren. Sie ermöglichen die Erstellung von stark typisierten Logging-Methoden, die zur Laufzeit keine zusätzlichen Reflection-Kosten verursachen.

Beispiel: Verwendung von Logging Source Generators

Hier ist ein Beispiel, wie ein Logging Source Generator verwendet wird:

using Microsoft.Extensions.Logging;

public static partial class MyLoggerExtensions
{
    [LoggerMessage(EventId = 0, Level = LogLevel.Information, Message = "Starting process {ProcessName}")]
    public static partial void LogProcessStart(this ILogger logger, string processName);
}

public class MyService
{
    private readonly ILogger<MyService> _logger;

    public MyService(ILogger<MyService> logger)
    {
        _logger = logger;
    }

    public void StartProcess(string processName)
    {
        _logger.LogProcessStart(processName);
    }
}

In diesem Beispiel wird eine stark typisierte Logging-Methode LogProcessStart erstellt. Diese Methode wird vom Source Generator zur Kompilierzeit generiert und optimiert.

Vorteile

  • Starke Typisierung: Verhindert Fehler bei der Angabe von Logging-Nachrichten und -Parametern.
  • Keine Reflection-Kosten: Verbessert die Laufzeitleistung durch Vermeidung von Reflection.

Fazit

Die Einführung von Regex und Logging Source Generators in .NET 6 bietet Entwicklern leistungsstarke Werkzeuge zur Verbesserung der Effizienz und Lesbarkeit ihres Codes. Durch die Kompilierung von regulären Ausdrücken und die Erstellung von stark typisierten Logging-Methoden zur Kompilierzeit können Anwendungen schneller und fehlerfreier werden.

Es lohnt sich, diese neuen Features in zukünftigen Projekten zu erkunden und zu nutzen, um von den Leistungs- und Sicherheitsvorteilen zu profitieren.

Für weitere Details und eine ausführliche Anleitung besuche die offizielle Microsoft-Dokumentation.