C# Academy · Lektion

Grundlæggende profiling og traces (koncepter)

Mål kode med Stopwatch, opret små tidsmålings scopes, forstå trace-korrelations-ID'er, og lær grundlæggende hygiejne ved micro-benchmarks.

Lektion 2 af 38 trin

Grundlæggende profiling og traces (koncepter) er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 2 af 3. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 3 lektioner i alt.

Grundlæggende om tidsmåling og sporing

Mål:

  • Mål tidskritiske kodeveje med Stopwatch
  • Tilføj små tidsafgrænsninger for blokke
  • Brug korrelations-id'er til sporing for at sammenkæde hændelser
  • Undgå støjende målinger

Demonstration af Stopwatch

Brug Stopwatch til at måle kodens køretid; varm først koden op, og gentag arbejdet for at udjævne støj fra 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);
  }
}

Hjælper til tidsafgrænsning

Indram blokke med en TimeScope for at se varigheden af navngivne sektioner uden at gentage Stopwatch-kode.

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();
    }
  }
}

Demonstration af korrelations-id

Angiv et korrelations-id (ActivityId) for at sammenkæde relaterede sporingsmeddelelser på tværs af kald.

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);
  }
}

Oversigt over profilering

  • Profileringsværktøjer med stikprøver: optag snapshots af kaldestakken med jævne mellemrum (lav belastning)
  • Instrumentering: mål bestemte blokke (Stopwatch/tidsafgrænsninger)
  • Begynd bredt med stikprøver, og bekræft med målrettet tidsmåling

God praksis for målinger

Tip:

  • Mål i Release med optimeringer slået til
  • Undgå Console.WriteLine i kode, der måles
  • Gentag kørsler; rapportér gennemsnit
  • Mål med realistiske datastørrelser

Regel for mikrobenchmarking

Hurtigt tjek: Hvad er en god grundlæggende praksis ved mikrobenchmarking af kode med Stopwatch?

Opsummering

Opsummering: Brug Stopwatch og små tidsafgrænsninger til at måle blokke; tilføj et korrelations-id for at sammenkæde spor; mål på en ren måde (opvarmning, gentagelse, Release).

Gratis at komme i gang

Lær C# med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
93
Lektioner
346

Ofte stillede spørgsmål

Er lektionen “Grundlæggende profiling og traces (koncepter)” gratis?

Ja — hele teksten til “Grundlæggende profiling og traces (koncepter)” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 3 lektioner i alt.

Hvad lærer jeg i “Grundlæggende profiling og traces (koncepter)”?

Mål kode med Stopwatch, opret små tidsmålings scopes, forstå trace-korrelations-ID'er, og lær grundlæggende hygiejne ved micro-benchmarks. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C# Academy?

Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 3.

Hvor lang tid tager lektionen “Grundlæggende profiling og traces (koncepter)”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C# Academy-lektion?

Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Logningsabstraktioner, Debug/Trace
  2. Grundlæggende profiling og traces (koncepter)
  3. Mønstre til guards og validering
← Tilbage til C# Academy