Przejdź do treści stopki
POMOC .NET

C# Stopwatch (jak to działa dla programistów)

W obszernym krajobrazie języków programowania C# wyróżnia się jako wszechstronny i potężny język używany do tworzenia szerokiej gamy aplikacji, począwszy od aplikacji na komputery stacjonarne po aplikacje sieciowe i mobilne. Jedną z kluczowych cech, które sprawiają, że C# jest ulubieńcem wśród deweloperów, jest jego bogaty zestaw bibliotek i klas, oferujący rozwiązania wielu wyzwań programistycznych. Wśród nich klasa Stopwatch zajmuje szczególne miejsce ze względu na swoją rolę w dokładnym pomiarze czasu, profilowaniu i analizie wydajności.

W tym artykule pokażemy, jak używać obiektu Stopwatch w C#, aby znaleźć czas potrzebny do wykonania określonego zadania, korzystając z publicznej właściwości TimeSpan Elapsed. Ponadto zmierzymy całkowity upływ czasu mierzony podczas tworzenia PDF przy użyciu IronPDF for C# Developers.

1. Co to jest klasa Stopwatch?

Klasa Stopwatch jest częścią przestrzeni nazw System.Diagnostics w C# i zapewnia prosty i wydajny sposób mierzenia upływu czasu z dużą precyzją. Została wprowadzona wraz z .NET Framework i jest cennym narzędziem dla deweloperów do śledzenia czasu wykonania segmentów kodu, optymalizacji wydajności i profilowania aplikacji.

2. Inicjalizacja i podstawowe użycie

Korzystanie z klasy Stopwatch jest proste. Aby zacząć z niej korzystać, najpierw trzeba utworzyć nową instancję klasy Stopwatch:

using System.Diagnostics;

class Program
{
    static void Main()
    {
        // Create a new stopwatch instance for timing operations
        Stopwatch stopwatch = new Stopwatch();
    }
}
using System.Diagnostics;

class Program
{
    static void Main()
    {
        // Create a new stopwatch instance for timing operations
        Stopwatch stopwatch = new Stopwatch();
    }
}
Imports System.Diagnostics

Friend Class Program
	Shared Sub Main()
		' Create a new stopwatch instance for timing operations
		Dim stopwatch As New Stopwatch()
	End Sub
End Class
$vbLabelText   $csharpLabel

Po utworzeniu instancji Stopwatch można uruchomić i zatrzymać stoper, aby zmierzyć upływ czasu:

using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();

        // Start timing
        stopwatch.Start();
        Console.WriteLine("It will measure the time between start and stop");

        // Stop timing
        stopwatch.Stop();
    }
}
using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();

        // Start timing
        stopwatch.Start();
        Console.WriteLine("It will measure the time between start and stop");

        // Stop timing
        stopwatch.Stop();
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		Dim stopwatch As New Stopwatch()

		' Start timing
		stopwatch.Start()
		Console.WriteLine("It will measure the time between start and stop")

		' Stop timing
		stopwatch.Stop()
	End Sub
End Class
$vbLabelText   $csharpLabel

Upływ czasu można uzyskać za pomocą właściwości Elapsed:

using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();

        // Simulate some work by sleeping for 2 seconds
        System.Threading.Thread.Sleep(2000);

        // Stop timing
        stopwatch.Stop();

        // Fetch the elapsed time
        TimeSpan elapsed = stopwatch.Elapsed;
        Console.WriteLine($"Elapsed time: {elapsed}");
    }
}
using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();

        // Simulate some work by sleeping for 2 seconds
        System.Threading.Thread.Sleep(2000);

        // Stop timing
        stopwatch.Stop();

        // Fetch the elapsed time
        TimeSpan elapsed = stopwatch.Elapsed;
        Console.WriteLine($"Elapsed time: {elapsed}");
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		Dim stopwatch As New Stopwatch()
		stopwatch.Start()

		' Simulate some work by sleeping for 2 seconds
		System.Threading.Thread.Sleep(2000)

		' Stop timing
		stopwatch.Stop()

		' Fetch the elapsed time
		Dim elapsed As TimeSpan = stopwatch.Elapsed
		Console.WriteLine($"Elapsed time: {elapsed}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Wynik:

C# Stopwatch (Jak to działa dla deweloperów): Rysunek 1 - Wyjście zegara systemowego

3. Zaawansowane funkcje Stopwatch

Klasa Stopwatch oferuje kilka zaawansowanych funkcji oprócz podstawowego pomiaru czasu. Poznajmy niektóre z tych funkcji:

3.1. Metoda Restart

Metoda Restart jest wygodnym sposobem na zatrzymanie i zresetowanie upływu czasu do zera w jednej operacji. Może być to przydatne przy pomiarze czasu wykonania wielu segmentów kodu bez tworzenia nowej instancji Stopwatch.

using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();

        // Start timing
        stopwatch.Start();
        Console.WriteLine("The time will restart after executing the below code");

        // Restart timing
        stopwatch.Restart();

        // Simulate work
        System.Threading.Thread.Sleep(1000);

        // Stop timing
        stopwatch.Stop();

        // Fetch the elapsed time after restart
        TimeSpan elapsed = stopwatch.Elapsed;
        Console.WriteLine($"Total Elapsed time after Restart: {elapsed}");
    }
}
using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();

        // Start timing
        stopwatch.Start();
        Console.WriteLine("The time will restart after executing the below code");

        // Restart timing
        stopwatch.Restart();

        // Simulate work
        System.Threading.Thread.Sleep(1000);

        // Stop timing
        stopwatch.Stop();

        // Fetch the elapsed time after restart
        TimeSpan elapsed = stopwatch.Elapsed;
        Console.WriteLine($"Total Elapsed time after Restart: {elapsed}");
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		Dim stopwatch As New Stopwatch()

		' Start timing
		stopwatch.Start()
		Console.WriteLine("The time will restart after executing the below code")

		' Restart timing
		stopwatch.Restart()

		' Simulate work
		System.Threading.Thread.Sleep(1000)

		' Stop timing
		stopwatch.Stop()

		' Fetch the elapsed time after restart
		Dim elapsed As TimeSpan = stopwatch.Elapsed
		Console.WriteLine($"Total Elapsed time after Restart: {elapsed}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Wynik:

C# Stopwatch (Jak to działa dla deweloperów): Rysunek 2 - Wyjście Restart

3.2. IsHighResolution Property

Właściwość IsHighResolution wskazuje, czy zastosowany mechanizm pomiaru czasu opiera się na wysokorozdzielczym liczniku wydajności, aby dokładnie mierzyć upływ czasu. Sprawdzenie tej właściwości może być przydatne, gdy pracujemy z systemami, które mogą nie obsługiwać metod pomiaru czasu o wysokiej rozdzielczości.

using System;

class Program
{
    static void Main()
    {
        if (Stopwatch.IsHighResolution)
        {
            Console.WriteLine("High-resolution timing is supported");
        }
        else
        {
            Console.WriteLine("Fallback to lower-resolution timing");
        }
    }
}
using System;

class Program
{
    static void Main()
    {
        if (Stopwatch.IsHighResolution)
        {
            Console.WriteLine("High-resolution timing is supported");
        }
        else
        {
            Console.WriteLine("Fallback to lower-resolution timing");
        }
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		If Stopwatch.IsHighResolution Then
			Console.WriteLine("High-resolution timing is supported")
		Else
			Console.WriteLine("Fallback to lower-resolution timing")
		End If
	End Sub
End Class
$vbLabelText   $csharpLabel

Wynik:

C# Stopwatch (Jak to działa dla deweloperów): Rysunek 3 - Wyjście pomiaru czasu o wysokiej rozdzielczości

3.3. Właściwość Frequency

Właściwość Frequency zwraca częstotliwość zastosowanego zegara w tikach na sekundę. Ta wartość jest użyteczna do przeliczania upływu tików na inne jednostki czasu, takie jak milisekundy.

using System;

class Program
{
    static void Main()
    {
        long frequency = Stopwatch.Frequency;
        Console.WriteLine($"Timer Frequency: {frequency} ticks per second");
    }
}
using System;

class Program
{
    static void Main()
    {
        long frequency = Stopwatch.Frequency;
        Console.WriteLine($"Timer Frequency: {frequency} ticks per second");
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		Dim frequency As Long = Stopwatch.Frequency
		Console.WriteLine($"Timer Frequency: {frequency} ticks per second")
	End Sub
End Class
$vbLabelText   $csharpLabel

Wynik:

C# Stopwatch (Jak to działa dla deweloperów): Rysunek 4 - Wyjście częstotliwości

3.4. Właściwość ElapsedTicks

Właściwość ElapsedTicks daje bezpośredni dostęp do surowego licznika tików bez potrzeby przeliczania go na jednostki czasu. Może to być korzystne przy wykonywaniu własnych obliczeń lub pracy z niskopoziomowymi wymaganiami pomiaru czasu.

using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();

        // Simulate some work
        System.Threading.Thread.Sleep(1500);

        // Stop timing
        stopwatch.Stop();

        // Fetch the elapsed ticks
        long elapsedTicks = stopwatch.ElapsedTicks;
        Console.WriteLine($"Elapsed Ticks: {elapsedTicks}");
    }
}
using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();

        // Simulate some work
        System.Threading.Thread.Sleep(1500);

        // Stop timing
        stopwatch.Stop();

        // Fetch the elapsed ticks
        long elapsedTicks = stopwatch.ElapsedTicks;
        Console.WriteLine($"Elapsed Ticks: {elapsedTicks}");
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		Dim stopwatch As New Stopwatch()
		stopwatch.Start()

		' Simulate some work
		System.Threading.Thread.Sleep(1500)

		' Stop timing
		stopwatch.Stop()

		' Fetch the elapsed ticks
		Dim elapsedTicks As Long = stopwatch.ElapsedTicks
		Console.WriteLine($"Elapsed Ticks: {elapsedTicks}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Wynik:

C# Stopwatch (Jak to działa dla deweloperów): Rysunek 5 - Wyjście ukończonych tików

4. Introduction to IronPDF in C

IronPDF to potężna biblioteka C# pozwalająca deweloperom na łatwe tworzenie, manipulowanie i przetwarzanie dokumentów PDF wewnątrz swoich aplikacji .NET. Niezależnie od tego, czy potrzebujesz generować PDF-y z HTML, obrazów lub innych formatów, IronPDF zapewnia kompleksowy zestaw narzędzi do bezproblemowej integracji z twoimi projektami C#.

IronPDF oferuje unikalną możliwość konwersji HTML na PDF zachowując układy i style. Ta funkcjonalność jest idealna do tworzenia PDF-ów z treści internetowych, takich jak raporty, faktury lub dokumentacja. Możesz konwertować pliki HTML, adresy URL oraz ciągi HTML na pliki PDF.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        // Initialize the PDF renderer
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        // Initialize the PDF renderer
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Initialize the PDF renderer
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

4.1. Installation of IronPDF in C

Aby zacząć korzystać z IronPDF w swojej aplikacji C#, wykonaj te proste kroki:

  1. Menadżer pakietów NuGet: Otwórz swój projekt C# w Visual Studio i przejdź do Konsoli Menadżera Pakietów. Wykonaj następujące polecenie, aby zainstalować IronPDF:

    Install-Package IronPdf

    Alternatywnie możesz użyć IronPDF NuGet Package Page, aby pobrać i zainstalować pakiet IronPdf.

  2. Odwołanie w kodzie: Po pomyślnej instalacji dodaj odwołanie do IronPDF w swoim kodzie C#:

    using IronPdf;
    using IronPdf;
    Imports IronPdf
    $vbLabelText   $csharpLabel

    Teraz jesteś gotowy, aby wykorzystać możliwości IronPDF w swojej aplikacji.

4.2. Korzystanie z C# Stopwatch do mierzenia czasu tworzenia PDF z URL

Teraz pokażemy, jak użyć klasy Stopwatch w C# do zmierzenia czasu potrzebnego do utworzenia PDF z URL przy użyciu IronPDF:

using System;
using System.Diagnostics;
using IronPdf;

class Program
{
    static void Main()
    {
        // Initialize IronPDF Renderer
        IronPdf.HtmlToPdf Renderer = new IronPdf.HtmlToPdf();

        // Specify the URL for PDF generation
        string urlToConvert = "https://example.com";

        // Use Stopwatch to measure the time taken
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();

        // Create PDF from URL
        PdfDocument PDF = Renderer.RenderUrlAsPdf(urlToConvert);

        // Stop measuring elapsed time
        stopwatch.Stop();

        // Save the generated PDF to a file
        PDF.SaveAs("GeneratedPDF.pdf");

        // Display the time taken
        Console.WriteLine($"Time taken to create PDF from URL: {stopwatch.ElapsedMilliseconds} milliseconds");
    }
}
using System;
using System.Diagnostics;
using IronPdf;

class Program
{
    static void Main()
    {
        // Initialize IronPDF Renderer
        IronPdf.HtmlToPdf Renderer = new IronPdf.HtmlToPdf();

        // Specify the URL for PDF generation
        string urlToConvert = "https://example.com";

        // Use Stopwatch to measure the time taken
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();

        // Create PDF from URL
        PdfDocument PDF = Renderer.RenderUrlAsPdf(urlToConvert);

        // Stop measuring elapsed time
        stopwatch.Stop();

        // Save the generated PDF to a file
        PDF.SaveAs("GeneratedPDF.pdf");

        // Display the time taken
        Console.WriteLine($"Time taken to create PDF from URL: {stopwatch.ElapsedMilliseconds} milliseconds");
    }
}
Imports System
Imports System.Diagnostics
Imports IronPdf

Friend Class Program
	Shared Sub Main()
		' Initialize IronPDF Renderer
		Dim Renderer As New IronPdf.HtmlToPdf()

		' Specify the URL for PDF generation
		Dim urlToConvert As String = "https://example.com"

		' Use Stopwatch to measure the time taken
		Dim stopwatch As New Stopwatch()
		stopwatch.Start()

		' Create PDF from URL
		Dim PDF As PdfDocument = Renderer.RenderUrlAsPdf(urlToConvert)

		' Stop measuring elapsed time
		stopwatch.Stop()

		' Save the generated PDF to a file
		PDF.SaveAs("GeneratedPDF.pdf")

		' Display the time taken
		Console.WriteLine($"Time taken to create PDF from URL: {stopwatch.ElapsedMilliseconds} milliseconds")
	End Sub
End Class
$vbLabelText   $csharpLabel

Ten przykład inicjalizuje IronPDF, używa klasy HtmlToPdf do renderowania PDF ze wskazanego URL i mierzy czas używając Stopwatch. Dostosuj zmienną urlToConvert do żądanego URL i możesz dalej dostosowywać proces tworzenia PDF według potrzeb swojej aplikacji.

Wynik:

C# Stopwatch (Jak to działa dla deweloperów): Rysunek 6 - Wyjście czasomierza tworzenia PDF

5. Podsumowanie

Podsumowując, klasa Stopwatch w C# jest kluczowym narzędziem do dokładnego pomiaru czasu i analizy wydajności, oferując deweloperom środki do optymalizacji kodu i oceny efektywności operacyjnej. Jej intuicyjny interfejs i zaawansowane funkcje czynią ją wszechstronną do różnych wymagań czasowych. Ponadto, integracja IronPDF w projektach C# rozszerza możliwości języka w manipulacji dokumentami PDF, dostarczając bezproblemowe rozwiązanie do tworzenia, modyfikowania i przetwarzania PDF-ów.

Przedstawiony przykład użycia Stopwatch do mierzenia czasu na stworzenie PDF z URL za pomocą IronPDF pokazuje synergię pomiędzy precyzyjnym śledzeniem czasu a zaawansowanymi bibliotekami, podkreślając znaczenie dokładnego pomiaru czasu w ocenie wydajności aplikacji. Razem, Stopwatch w C# i IronPDF umożliwiają deweloperom budowanie aplikacji o wysokiej wydajności z dokładnym pomiarem czasu i wszechstronnymi możliwościami obsługi PDF.

Aby uzyskać darmową licencję próbną na przetestowanie funkcji IronPDF, odwiedź Stronę informacji o licencjonowaniu IronPDF. Kompletny poradnik na temat konwersji URL na PDF można znaleźć na Poradniku IronPDF: URL na PDF.

Często Zadawane Pytania

Jak klasa Stopwatch pomaga w optymalizacji wydajności aplikacji C#?

Klasa Stopwatch w C# pozwala programistom mierzyć czas wykonania kodu z wysoką precyzją. Dzięki śledzeniu upływającego czasu programiści mogą identyfikować wąskie gardła wydajności i optymalizować kod dla lepszej efektywności.

Jakie zaawansowane funkcje oferuje klasa Stopwatch dla programistów C#?

Klasa Stopwatch oferuje zaawansowane funkcje takie jak metoda Restart do resetowania i ponownego rozpoczynania pomiaru czasu, IsHighResolution do sprawdzania precyzji systemowego pomiaru, Frequency do częstotliwości pomiaru i ElapsedTicks do szczegółowego pomiaru czasu.

Czy klasa Stopwatch może być używana do pomiaru wysokiej rozdzielczości we wszystkich systemach?

Klasa Stopwatch obsługuje pomiar wysokiej rozdzielczości, jeśli sprzęt systemu na to pozwala. Programiści mogą sprawdzić właściwość IsHighResolution, aby określić, czy ich system umożliwia pomiar wysokiej rozdzielczości.

Jak można przekształcić zawartość HTML na PDF w aplikacji C#?

Możesz użyć IronPDF do konwersji zawartości HTML na PDF w aplikacji C#. IronPDF zachowuje integralność układu i stylu HTML, co czyni go odpowiednim do generowania wysokiej jakości dokumentów PDF, takich jak raporty i faktury.

Jak zintegrować Stopwatch z generowaniem PDF w C#?

Aby zintegrować Stopwatch z generowaniem PDF, uruchom Stopwatch przed rozpoczęciem procesu renderowania PDF z IronPDF. Po wygenerowaniu PDF, zatrzymaj Stopwatch, aby zmierzyć czas potrzebny na cały proces.

Jaki jest proces instalacji biblioteki PDF w projekcie Visual Studio C#?

W Visual Studio możesz zainstalować IronPDF za pomocą Menedżera pakietów NuGet. Wykonaj polecenie Install-Package IronPdf w konsoli menedżera pakietów i dodaj using IronPdf; do swojego kodu, aby uzyskać dostęp do jego funkcjonalności.

Dlaczego klasa Stopwatch jest kluczowa dla strojenia wydajności w C#?

Klasa Stopwatch jest kluczowa dla strojenia wydajności, ponieważ zapewnia precyzyjne możliwości pomiaru, które pomagają programistom mierzyć i analizować czas wykonania kodu. Te informacje są niezbędne do identyfikacji wolnych operacji i poprawy wydajności aplikacji.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie