跳過到頁腳內容
.NET HELP

C# Stopwatch (How It Works For Developers)

在浩瀚的程式語言領域,C# 憑藉其多功能性和強大的功能脫穎而出,成為開發各種應用程式(從桌面應用程式到 Web 應用程式和行動應用程式)的利器。 C# 之所以深受開發者喜愛,關鍵原因之一是它擁有豐富的函式庫和類別,能夠為各種程式設計難題提供解決方案。 其中,秒錶類別因其在精確時間測量、效能分析和效能測試中的作用而佔據特殊地位。

在本文中,我們將了解如何在 C# 中使用 Stopwatch 對象,透過公共 TimeSpan Elapsed 屬性來尋找執行特定任務所花費的時間。 此外,我們將使用IronPDF for C# Developers測量建立 PDF 的總耗時。

1. 什麼是秒錶類別?

Stopwatch類別是 C# 中System.Diagnostics命名空間的一部分,它提供了一種簡單且有效率的方式來高精度地測量經過的時間。 它隨 .NET Framework 一起推出,一直是開發人員追蹤程式碼段執行時間、優化效能和分析應用程式的寶貴工具。

2. 初始化和基本用法

使用Stopwatch類別非常簡單。 要開始使用它,首先需要建立一個新的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();
    }
}
$vbLabelText   $csharpLabel

建立Stopwatch實例後,即可啟動和停止秒錶來測量經過的時間:

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

可以使用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}");
    }
}
$vbLabelText   $csharpLabel

輸出:

C# 秒錶(開發者使用方法):圖 1 - 系統計時器輸出

3. 秒錶的進階功能

Stopwatch類別除了基本的計時功能外,還提供了一些進階功能。 讓我們來了解一下其中的一些功能:

3.1. 重啟方法

Restart方法是一種便捷的方式,可以在一次操作中停止並將經過的時間重設為零。 當需要測量多個程式碼段的執行時間而無需建立新的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}");
    }
}
$vbLabelText   $csharpLabel

輸出:

C# 秒錶(開發者使用方法):圖 2 - 重啟輸出

3.2. IsHighResolution屬性

IsHighResolution屬性指示底層計時機制是否基於高解析度效能計數器來精確測量經過的時間。在處理可能不支援高解析度計時方法的系統時,檢查此屬性非常有用。

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");
        }
    }
}
$vbLabelText   $csharpLabel

輸出:

C# 秒錶(開發者使用方法):圖 3 - 高解析度計時輸出

3.3 頻率特性

Frequency屬性傳回底層計時器每秒的滴答數。 該值可用於將經過的滴答數轉換為其他時間單位,例如毫秒。

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");
    }
}
$vbLabelText   $csharpLabel

輸出:

C# 秒錶(開發者使用方法):圖 4 - 頻率輸出

3.4. ElapsedTicks 屬性

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}");
    }
}
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}");
    }
}
$vbLabelText   $csharpLabel

輸出:

C# 秒錶(開發者使用方法):圖 5 - 經過的刻度輸出

4. IronPDF C# 簡介

IronPDF 是一個功能強大的 C# 程式庫,它允許開發人員在其 .NET 應用程式中輕鬆建立、操作和處理 PDF 文件。 無論您需要從 HTML、圖像或其他格式產生 PDF,IronPDF 都提供了一套全面的工具,可無縫整合到您的 C# 專案中。

IronPDF 具有將HTML 轉換為 PDF 的獨特功能,同時保持佈局和樣式不變。 此功能非常適合從網頁內容(例如報告、發票或文件)建立 PDF 文件。 您可以將 HTML 檔案、URL 和 HTML 字串轉換為 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");
    }
}
$vbLabelText   $csharpLabel

4.1. 在 C# 中安裝 IronPDF

若要開始在 C# 應用程式中使用 IronPDF,請依照以下簡單步驟操作:

  1. NuGet 套件管理器:在 Visual Studio 中開啟您的 C# 專案並導覽至套件管理器控制台。 執行以下指令安裝 IronPDF:

    Install-Package IronPdf

    或者,您可以使用IronPDF NuGet 套件頁面下載並安裝"IronPdf"套件。

2.程式碼引用:安裝成功後,在 C# 程式碼中加入對 IronPDF 的引用:

   using IronPdf;
   using IronPdf;
$vbLabelText   $csharpLabel

現在,您就可以在應用程式中利用 IronPDF 的各項功能了。

4.2. 使用 C# 秒錶計時從 URL 建立 PDF 文件

現在,讓我們示範如何使用 C# 的Stopwatch類別來測量使用 IronPDF 從 URL 建立 PDF 所需的時間:

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");
    }
}
$vbLabelText   $csharpLabel

本範例初始化 IronPDF,使用HtmlToPdf類別從指定的 URL 渲染 PDF,並使用Stopwatch所花費的時間。 使用所需的 URL 調整urlToConvert變量,您可以根據應用程式的需求進一步自訂 PDF 建立流程。

輸出:

C# 秒錶(開發者使用方法):圖 6 - PDF 建立計時器輸出

5. 結論

總之,C# 中的Stopwatch類別是進行精確時間測量和效能分析的關鍵工具,為開發人員提供了優化程式碼和評估運作效率的手段。 其直覺的介面和先進的功能使其能夠滿足各種時間要求。 此外,將 IronPDF 整合到 C# 專案中,擴展了該語言在 PDF 文件操作方面的功能,為產生、修改和處理 PDF 提供了無縫解決方案。

使用Stopwatch測量 IronPDF 從 URL 建立 PDF 所需的時間的範例,展示了精確的時間追蹤和進階庫之間的協同作用,突顯了在評估應用程式效能時進行精確計時的重要性。 C# 的Stopwatch和 IronPDF 相結合,使開發人員能夠建立具有精確計時和多功能 PDF 處理功能的高效能應用程式。

若要取得免費試用許可證以測試 IronPDF 的功能,請造訪IronPDF 許可資訊頁面。 有關 URL 轉 PDF 的完整教學課程,請參閱IronPDF URL 轉 PDF 教學

常見問題解答

Stopwatch 類如何協助優化 C# 應用程式效能?

C# 中的 Stopwatch 類別可讓開發人員高精確度地測量程式碼執行所花費的時間。透過追蹤已耗費的時間,開發人員可以找出效能瓶頸,並最佳化程式碼以獲得更高的效率。

Stopwatch class 為 C# 開發人員提供哪些進階功能?

Stopwatch 類別提供了一些進階功能,例如用於重設和重新開始計時的 Restart 方法、用於檢查系統計時精確度的 IsHighResolution、用於計時頻率的 Frequency,以及用於粒度時間測量的 ElapsedTicks。

Stopwatch 類別可以用於所有系統的高解析度計時嗎?

如果系統的硬體提供高解析度,Stopwatch 類別就會支援高解析度計時。開發人員可檢查 IsHighResolution 屬性,以確定其系統是否允許高解析度計時。

如何在 C# 應用程式中將 HTML 內容轉換為 PDF?

您可以使用 IronPDF 在 C# 應用程式中將 HTML 內容轉換為 PDF。IronPDF 可保持 HTML 的版面和樣式完整性,因此適合產生高品質的 PDF 文件,例如報告和發票。

如何在 C# 中整合 Stopwatch 與 PDF 生成?

要將 Stopwatch 與 PDF 生成整合,請在啟動 IronPDF 的 PDF 渲染程序之前啟動 Stopwatch。PDF 生成後,停止 Stopwatch 以測量整個過程所需的時間。

在 Visual Studio C# 專案中安裝 PDF 函式庫的流程為何?

在 Visual Studio 中,您可以使用 NuGet Package Manager 安裝 IronPDF。在套件管理員控制台執行指令 Install-Package IronPdf 並在您的程式碼中包含 using IronPdf; 以存取其功能。

為何 Stopwatch 類別對 C# 的效能調整至關重要?

Stopwatch 類別對效能調整至關重要,因為它提供精確的計時功能,可協助開發人員測量和分析程式碼的執行時間。這些資訊對於識別緩慢的作業和改善應用程式效能非常重要。

Jacob Mellor,技術長 @ Team Iron
首席技術長

Jacob Mellor 是 Iron Software 的首席技術長,也是開創 C# PDF 技術的有遠見的工程師。作為 Iron Software 核心程式碼庫背後的原始開發人員,他從公司成立之初就塑造了公司的產品架構,與首席執行官 Cameron Rimington 一起將公司轉型為一家 50 多人的公司,為 NASA、Tesla 和全球政府機構提供服務。

Jacob 持有曼徹斯特大學土木工程一級榮譽工程學士學位 (BEng)(1998-2001 年)。

Jacob 於 1999 年在倫敦開設了他的第一家軟體公司,並於 2005 年創建了他的第一個 .NET 元件,之後,他專門解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF & Iron Suite for .NET 函式庫在全球的 NuGet 安裝量已超過 3000 萬次,他的基礎程式碼持續為全球使用的開發人員工具提供動力。Jacob 擁有 25 年的商業經驗和 41 年的編碼專業知識,他一直專注於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代的技術領導者。