C# Academy · Lekcja

Podstawy profilowania i śladów (koncepcje)

Proszę mierzyć kod za pomocą Stopwatch, tworzyć małe zakresy pomiaru czasu, zrozumieć identyfikatory korelacji śladów oraz poznać podstawowe zasady higieny mikrob benchmarków.

Lekcja 2 z 38 kroki

Podstawy profilowania i śladów (koncepcje) to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.

Podstawy pomiaru czasu i śledzenia

Cel:

  • Mierzyć gorące ścieżki za pomocą Stopwatch
  • Dodawać niewielkie zakresy pomiaru czasu dla bloków kodu
  • Używać identyfikatorów korelacji śledzenia do łączenia zdarzeń
  • Unikać nadmiarowych pomiarów

Przykład Stopwatch

Używaj Stopwatch do mierzenia czasu działania kodu; najpierw rozgrzej kod, a następnie powtórz operację, aby ograniczyć wpływ zakłóceń 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);
  }
}

Pomocniczy zakres pomiaru czasu

Umieszczaj bloki w TimeScope, aby sprawdzać czas trwania nazwanych sekcji bez powtarzania kodu związanego z 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();
    }
  }
}

Przykład identyfikatora korelacji

Ustaw identyfikator korelacji (ActivityId), aby łączyć powiązane komunikaty śledzenia w różnych wywołaniach.

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

Przegląd profilowania

  • Profilery próbkowania: okresowo przechwytują migawki stosu (mały narzut)
  • Instrumentacja: mierzy określone bloki (Stopwatch/zakresy pomiaru czasu)
  • Zacznij szeroko od próbkowania; potwierdź wyniki ukierunkowanym pomiarem czasu

Dobre praktyki pomiarów

Wskazówki:

  • Mierz w konfiguracji Release z włączonymi optymalizacjami
  • Unikaj Console.WriteLine w mierzonym kodzie
  • Powtarzaj pomiary; podawaj średnie
  • Mierz realistyczne rozmiary danych wejściowych

Zasada mikrobenchmarkingu

Szybkie sprawdzenie: jaka jest dobra podstawowa praktyka podczas wykonywania mikrobenchmarków kodu za pomocą Stopwatch?

Podsumowanie

Podsumowanie: Używaj Stopwatch i małych zakresów pomiaru czasu do mierzenia bloków kodu; dodaj identyfikator korelacji, aby łączyć ślady; mierz poprawnie (rozgrzewka, powtórzenia, konfiguracja Release).

Bezpłatny start

Ucz się C# dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
93
Lekcje
346

Często zadawane pytania

Czy lekcja „Podstawy profilowania i śladów (koncepcje)” jest bezpłatna?

Tak — pełny tekst „Podstawy profilowania i śladów (koncepcje)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Podstawy profilowania i śladów (koncepcje)”?

Proszę mierzyć kod za pomocą Stopwatch, tworzyć małe zakresy pomiaru czasu, zrozumieć identyfikatory korelacji śladów oraz poznać podstawowe zasady higieny mikrob benchmarków. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.

Ile czasu zajmuje lekcja „Podstawy profilowania i śladów (koncepcje)”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Abstrakcje logowania, Debug/Trace
  2. Podstawy profilowania i śladów (koncepcje)
  3. Wzorce walidacji i Guard
← Powrót do C# Academy