使用 C# 测量程序运行消耗的的时间

对于大多数任务,您可以使用Stopwatch或DateTime类来测量经过的时间。

要使用Stopwatch类,请创建一个Stopwatch对象。使用其Start和Stop方法启动和停止它。如果在停止对象后使用Start,时间将从停止的地方开始。这使得该类在您想要添加多个间隔时特别有用。使用Reset方法将时间重置为 0。使用StartNew方法创建一个新的Stopwatch并单步启动它。使用Stopwatch类的Elapsed属性获取表示已用时间的 TimeSpan对象。

要使用DateTime类,请使用静态Now属性来获取执行某些代码之前和之后的当前时间。将结果保存在DateTime变量中。然后减去它们以获得表示已用时间的 TimeSpan 。

当程序启动时,它使用以下代码准备运行并显示有关Stopwatch类的信息。

cs 复制代码
private DateTime StartTime, StopTime;
Stopwatch StopWatch;
Stopwatch TotalWatch = new Stopwatch();

private void Form1_Load(object sender, EventArgs e)
{
    txtFrequency.Text = Stopwatch.Frequency.ToString();
    txtNsPerTick.Text = (1000000000 / Stopwatch.Frequency).ToString();
    txtIsHighRes.Text = Stopwatch.IsHighResolution.ToString();
}

代码首先声明了两个DateTime和两个Stopwatch。窗体的Load事件处理程序显示Stopwatch类的频率(每秒滴答数)值和每滴答的纳秒数。它还指示该类是否使用高精度计时。在较旧的计算机上, 最后一项可能返回false 。

当您单击"开始"按钮时,将执行以下代码。

cs 复制代码
private void btnStart_Click(object sender, EventArgs e)
{
    btnStart.Enabled = false;
    btnStop.Enabled = true;
    txtElapsed1.Clear();
    txtElapsed2.Clear();
    txtElapsed3.Clear();

    StartTime = DateTime.Now;
    StopWatch = Stopwatch.StartNew();
    TotalWatch.Start();
}

此代码禁用"开始"按钮并启用"停止"按钮。然后清除结果文本框。

接下来,代码将StartTime设置为当前时间。然后创建并启动一个新的Stopwatch,并将其保存在变量StopWatch中。最后,它重新启动TotalWatch Stopwatch对象。

单击"停止"按钮时,将执行以下代码。

cs 复制代码
private void btnStop_Click(object sender, EventArgs e)
{
    StopTime = DateTime.Now;
    StopWatch.Stop();
    TotalWatch.Stop();

    TimeSpan elapsed = StopTime.Subtract(StartTime);
    txtElapsed1.Text = elapsed.TotalSeconds.ToString("0.000000");

    txtElapsed2.Text = StopWatch.Elapsed.TotalSeconds.ToString("0.000000");

    txtElapsed3.Text = TotalWatch.Elapsed.TotalSeconds.ToString("0.000000");

    btnStart.Enabled = true;
    btnStop.Enabled = false;
}

此代码单击"停止"按钮,程序将DateTime.Now记录在变量StopTime中,并停止两个Stopwatch。然后它显示这三种方法记录的经过时间。

如果您运行该程序几次,您将看到DateTime和Stopwatch类产生非常接近相同的结果。

相关推荐
☆5661 天前
基于C++的区块链实现
开发语言·c++·算法
于先生吖1 天前
JAVA 本地生活服务项目实战 家政 5.0 系统前后端分离部署
java·开发语言·生活
计算机安禾1 天前
【数据结构与算法】第5篇:线性表(一):顺序表(ArrayList)的实现与应用
c语言·开发语言·数据结构·c++·算法·visual studio code·visual studio
ghie90901 天前
C# WinForms 条形码生成器(含保存和打印预览功能)
开发语言·c#
霑潇雨1 天前
题解 | 深入分析各款产品年总销售额与竞品的年度对比
大数据·开发语言·数据库
2401_864959281 天前
C++与Python混合编程实战
开发语言·c++·算法
左左右右左右摇晃1 天前
Java并发——锁的状态演变
java·开发语言·笔记
2501_945424801 天前
C++与硬件交互编程
开发语言·c++·算法
2301_818419011 天前
C++中的表达式模板
开发语言·c++·算法
Roselind_Yi1 天前
排查Visual C++堆损坏(HEAP CORRUPTION)错误:从报错到解决的完整复盘
java·开发语言·c++·spring·bug·学习方法·远程工作