Case study · Performance su software esistente

Da 30,3 a circa 0,6 secondi su un gestionale .NET legacy

Hai un gestionale in cui alcune operazioni sono diventate particolarmente lente?
Prima di intervenire sul database, aumentare le risorse del server o ipotizzare modifiche più invasive, preferisco partire da un'analisi mirata per individuare dove si trova realmente il collo di bottiglia.
L'analisi potrebbe evidenziare che il problema non è il database, e non è necessario investire in nuove risorse hardware o modifiche invasive al sistema.
Se anche il tuo gestionale soffre di lentezza, forse questo caso reale può aiutarti, e se vuoi possiamo fare una chiacchierata per capire se posso essere di aiuto.

Un rallentamento reale su un'applicazione aziendale è stato risolto intervenendo esclusivamente sul codice C#, senza modificare SQL Server, struttura dati o comportamento funzionale.

Tempo di elaborazione 30,3 s → ~0,6 s circa −98% nello stesso scenario

Il problema

Quando un gestionale lento non ha un problema di database

Il caso riguarda un gestionale .NET legacy utilizzato tra le altre cose per attività operative dei tecnici. Durante il caricamento di una pagina, una parte dell'applicazione impiegava fino a 30,3 secondi per recuperare e comporre le informazioni necessarie all'interfaccia.

Il rallentamento era percepibile nel normale utilizzo del software e aveva generato diverse lamentele da parte degli utenti. Da qui la richiesta di analizzare la causa e trovare una soluzione.

Punto chiave

SQL Server era già ben ottimizzato

Il primo risultato dell'analisi è stato escludere il database come causa del problema. Non servivano modifiche a SQL Server o alla struttura dei dati.

Il collo di bottiglia era nel modo in cui il codice applicativo recuperava e componeva le informazioni.

L'intervento

Una modifica mirata, non una riscrittura

Dopo aver isolato il collo di bottiglia, ho modificato esclusivamente la strategia utilizzata dal codice C# per recuperare e comporre i dati. Input e output della funzionalità sono rimasti invariati, evitando di coinvolgere il resto dell'applicazione e mantenendo molto circoscritta l'area interessata dalla modifica. Questo ha permesso di ridurre anche il rischio di regressioni sulle funzionalità esistenti.

Database invariato

Nessuna modifica a SQL Server o alla struttura dati esistente.

Input invariati

La funzionalità ha continuato a lavorare sullo stesso scenario e sugli stessi dati.

Output invariato

Il risultato restituito all'applicazione non è stato ridotto o semplificato.

Stesso comportamento

La correzione non ha modificato il comportamento funzionale atteso dagli utenti.

Risultato misurato

La stessa operazione, da 30,3 a circa 0,6 secondi

Le misure prima e dopo sono direttamente confrontabili: stesso scenario, stesso risultato funzionale e stesso database. È cambiata esclusivamente la strategia applicativa utilizzata dal codice C#.

Prima30,3 s Dopo~0,6 s circa 50 volte più veloce

Perché è significativo

Prima di cambiare tecnologia, capire dove si trova davvero il problema

Su un'applicazione aziendale esistente un rallentamento importante può far pensare subito al database, all'infrastruttura o alla necessità di una revisione molto più ampia del sistema.

Prima di investire in più CPU, memoria o infrastruttura, conviene verificare dove viene realmente speso il tempo. Un sistema aziendale può essere cresciuto molto rispetto a quando è stato progettato: scelte tecniche inizialmente adeguate possono diventare inefficienti quando aumentano dati, utenti e funzionalità.

In questo caso non servivano nuove risorse né una revisione generale dell'architettura. L'analisi ha individuato una criticità circoscritta nel codice applicativo e ha permesso di intervenire esclusivamente nel punto necessario, lasciando invariato ciò che già funzionava correttamente.

È un principio che applico spesso sui software con performance deludenti: non partire dalla riscrittura, ma dal comportamento reale del sistema e da ciò che produce concretamente il problema.

Il mio ruolo

Analisi, diagnosi e intervento

Ho seguito autonomamente l'analisi del rallentamento, l'individuazione del collo di bottiglia, la definizione dell'intervento sul codice applicativo e la verifica del risultato.

Il valore non è stato soltanto rendere più veloce una funzione, ma distinguere il sintomo dalla causa e scegliere una modifica proporzionata al problema.

Approfondimento tecnico

Vuoi vedere cosa causava il rallentamento?

Nel case study ho volutamente mantenuto il focus sul problema, sull'analisi e sul risultato. Nell'articolo tecnico descrivo invece il pattern di accesso ai dati che causava il rallentamento e l'intervento adottato nel codice.

Partire dal problema reale

Hai un gestionale .NET lento o difficile da evolvere?

Posso analizzare l'applicazione esistente, individuare la criticità reale e valutare se sia possibile intervenire in modo circoscritto prima di affrontare modifiche più invasive.