Profilazione e trace di base (concetti)
Misurate il codice con Stopwatch, create piccoli ambiti di misurazione, comprendete gli ID di correlazione dei trace e imparate le basi per micro-benchmark affidabili.
Profilazione e trace di base (concetti) è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 2 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 3 lezioni in totale.
Nozioni di base su temporizzazione e tracing
Obiettivo:
- Misurare i percorsi critici con Stopwatch
- Aggiungere piccoli scope di temporizzazione per i blocchi
- Utilizzare gli ID di correlazione del trace per collegare gli eventi
- Evitare misurazioni eccessivamente frequenti
Dimostrazione di Stopwatch
Utilizzi Stopwatch per misurare la durata del codice; esegua prima una fase di riscaldamento e ripeta il lavoro per ridurre il rumore del JIT.
using System;
using System.Diagnostics;
using System.Threading;
// Simple loop timing with warmup; C# 6 compatible.
public class Program
{
static int Work(int n)
{
int s = 0;
for (int i = 0; i < n; i++) s += i; // small CPU work
return s;
}
public static void Main(string[] args)
{
// Warm up (JIT/caches)
Work(10000);
var sw = Stopwatch.StartNew();
for (int r = 0; r < 10; r++)
{
Work(20000);
}
sw.Stop();
Console.WriteLine("Elapsed ms (10 runs): " + sw.ElapsedMilliseconds);
}
}
Helper per lo scope di temporizzazione
Racchiuda i blocchi in un TimeScope per visualizzare la durata di sezioni denominate senza ripetere il codice di Stopwatch.
using System;
using System.Diagnostics;
// A small scope that times a block and prints on dispose.
public sealed class TimeScope : IDisposable
{
private readonly string _name;
private readonly Stopwatch _sw;
public TimeScope(string name)
{
_name = name;
_sw = Stopwatch.StartNew();
}
public void Dispose()
{
_sw.Stop();
Console.WriteLine(_name + " took " + _sw.ElapsedMilliseconds + " ms");
}
}
public class Program
{
static void DoWork()
{
// pretend work
long s = 0;
for (int i = 0; i < 300000; i++) s += i;
if (s == -1) Console.WriteLine();
}
public static void Main(string[] args)
{
using (new TimeScope("DoWork"))
{
DoWork();
}
}
}
Dimostrazione dell'ID di correlazione
Imposti un ID di correlazione (ActivityId) per collegare i messaggi di trace correlati tra diverse chiamate.
using System;
using System.Diagnostics;
// Use a correlation ID so related trace lines can be grouped.
public class Program
{
public static void Main(string[] args)
{
Trace.Listeners.Clear();
Trace.Listeners.Add(new ConsoleTraceListener());
Guid id = Guid.NewGuid();
Trace.CorrelationManager.ActivityId = id;
Trace.TraceInformation("Start request");
// ... do work
Trace.TraceInformation("Processing step A");
Trace.TraceInformation("Processing step B");
Trace.TraceInformation("End request");
Console.WriteLine("ActivityId: " + id);
}
}
Panoramica del profiling
- Profiler basati sul sampling: acquisiscono periodicamente snapshot dello stack (basso overhead)
- Instrumentation: misura blocchi specifici (Stopwatch/scope di temporizzazione)
- Inizi con un'analisi ampia tramite sampling; confermi i risultati con misurazioni mirate
Buone pratiche di misurazione
Suggerimenti:
- Misuri in Release con le ottimizzazioni abilitate
- Eviti Console.WriteLine all'interno del codice misurato
- Ripeta le esecuzioni; riporti le medie
- Misuri dimensioni di input realistiche
Regola per i micro-benchmark
Riepilogo
Riepilogo: utilizzi Stopwatch e piccoli scope di temporizzazione per misurare i blocchi; aggiunga un ID di correlazione per collegare i trace; esegua misurazioni corrette (riscaldamento, ripetizioni, Release).
Domande Frequenti
La lezione «Profilazione e trace di base (concetti)» è gratuita?
Sì — il testo completo di «Profilazione e trace di base (concetti)» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 3 lezioni in totale.
Cosa imparerò in «Profilazione e trace di base (concetti)»?
Misurate il codice con Stopwatch, create piccoli ambiti di misurazione, comprendete gli ID di correlazione dei trace e imparate le basi per micro-benchmark affidabili. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C# Academy?
Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 3.
Quanto tempo richiede la lezione «Profilazione e trace di base (concetti)»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C# Academy?
Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Astrazioni per il logging, Debug/Trace
- Profilazione e trace di base (concetti)
- Pattern di guardia e convalida