Categoria: programmazione .net e c#
-

Come Creare un Mutex in C# per i Background Job
Introduzione Quando si lavora con background job in C#, uno dei problemi più comuni è la gestione della concorrenza: più processi o thread potrebbero tentare di eseguire la stessa operazione contemporaneamente, causando conflitti o inconsistenze.La soluzione più semplice ed efficace è usare un Mutex (mutual exclusion), che permette di garantire che un solo job alla…
-

Span
, Memory e stackalloc: scrivere C# ad alte prestazioni senza GC overhead In .NET il garbage collector (GC) gestisce la memoria in modo automatico, evitando memory leak e semplificando la vita agli sviluppatori. Tuttavia, in applicazioni ad alte prestazioni (real-time, networking, finanza, AI, elaborazione di dati massivi), il GC può diventare un collo di bottiglia. Per rispondere a questa esigenza, Microsoft ha introdotto strumenti come Span<T>, Memory<T>…
-

C# .NET e .NET Core: guida alle versioni e ai termini
Introduzione Chi si avvicina al mondo C# e .NET spesso rimane confuso da termini come .NET Framework, .NET Core, .NET 5/6/7/8/9 e dalle differenze tra runtime, SDK e CLR.Questa guida nasce per fare chiarezza e fornire una panoramica aggiornata e semplice da consultare. .NET Framework: l’origine Quando usarlo?Solo se si lavora su progetti legacy Windows…
-

Async State Machines in C#: cosa genera il compilatore dietro ogni await
Quando scriviamo codice asincrono in C# utilizzando async e await, il compilatore fa molto più lavoro di quanto possa sembrare. Dietro la semplicità sintattica si nasconde un meccanismo sofisticato: la generazione di state machine asincrone. (C# async state machine) Comprendere come funzionano queste macchine a stati è fondamentale per chiunque voglia padroneggiare le performance, il…
-

C# Pattern Matching avanzato: guard clauses, switch expression e best practice
Introduzione Il pattern matching introdotto con C# 7 e ampliato nelle versioni successive (C# 8, 9, 10 e oltre) è ormai una caratteristica matura del linguaggio. Non si tratta più di un semplice strumento per controllare il tipo di un oggetto, ma di un costrutto espressivo che migliora leggibilità, sicurezza e manutenibilità del codice. In…
-

Kestrel in C#: cos’è davvero e come ottimizzarlo in produzione
TL;DR Kestrel è il web server integrato in ASP.NET Core, pensato per essere leggero, cross-platform e ad alte prestazioni. È production-ready, ma le sue performance reali dipendono dalla configurazione e dal modo in cui viene inserito nell’architettura complessiva. Per ottenere il massimo occorre definire endpoint, limiti e timeout, abilitare protocolli moderni solo quando servono, delegare…
-

DbContext in C#: Guida Completa ed Approfondita
Introduzione In Entity Framework Core, il DbContext in C# è il cuore del data access: È un concetto semplice ma potente: un errore nella gestione del DbContext può rallentare l’applicazione o introdurre bug complessi. In questo articolo vediamo come sfruttarlo al meglio, ottimizzando performance, testabilità e architettura. Cos’è il DbContext in C# Il DbContext in…
-

Union Types nel costruttore: PHP vs C#
Perché questo articolo PHP 8 ha introdotto i union types—comodissimi nei costruttori perché permettono di accettare più tipi senza duplicare la firma. In C# non esistono union types nativi, ma ci sono pattern idiomatici per ottenere la stessa ergonomia con type safety superiore. In questo articolo vediamo come tradurre la feature, quando conviene farlo e…
-

Perché scegliere Hexagonal Architecture (e non fermarsi a Layered o Clean)
Introduzione Molti sviluppatori iniziano con la classica Layered Architecture e alcuni tentano la Clean Architecture. Ma quando serve testabilità, manutenibilità e flessibilità, la scelta migliore è spesso la Hexagonal Architecture, nota anche come Ports and Adapters. In questo articolo vedremo: Cos’è l’Hexagonal Architecture? L’Hexagonal Architecture organizza l’applicazione in modo da isolare completamente la business logic…
-

Async/Await : quello che (forse) ti sfugge potrebbe rallentare tutto
L’introduzione di async/await in C# ha reso la programmazione asincrona molto più accessibile. Tuttavia, per chi lavora su sistemi scalabili, concurrent o ad alte prestazioni, usarli “alla leggera” può introdurre rallentamenti, memory leak o comportamenti imprevedibili. In questo articolo vediamo cosa succede realmente dietro la keyword async, perché ogni metodo asincrono ha un costo, e…