如何在使用c#执行方法后记录方法的持续时间,时间开始和结束时间?
例如,我点击一个按钮,它会做一些事情。一旦开始,我将获得开始时间,然后当执行完成时,我将获得时间结束以及完成所需的持续时间。
答案 0 :(得分:7)
您可以使用驻留在System.Diagnostics
命名空间中的Stopwatch。
这具有普通秒表的功能,包括Start
,Stop
,Reset
,ElapsedMilliseconds
等等。
这非常适合测量特定的代码块或方法。但是,除了执行的持续时间之外,您还要说明您需要开始和结束时间。您可以通过继承Stopwatch
类并使用几个DateTime
属性扩展它来创建自定义秒表。
public class CustomStopwatch : Stopwatch
{
public DateTime? StartAt { get; private set; }
public DateTime? EndAt { get; private set; }
public void Start()
{
StartAt = DateTime.Now;
base.Start();
}
public void Stop()
{
EndAt = DateTime.Now;
base.Stop();
}
public void Reset()
{
StartAt = null;
EndAt = null;
base.Reset();
}
public void Restart()
{
StartAt = DateTime.Now;
EndAt = null;
base.Restart();
}
}
并像这样使用它:
CustomStopwatch sw = new CustomStopwatch();
sw.Start();
Thread.Sleep(2342); // just to use some time, logic would be in here somewhere.
sw.Stop();
Console.WriteLine("Stopwatch elapsed: {0}, StartAt: {1}, EndAt: {2}", sw.ElapsedMilliseconds, sw.StartAt.Value, sw.EndAt.Value);
答案 1 :(得分:4)
您可以使用System.Diagnostics.Stopwatch
类来实现此目的。看样品
// Create new stopwatch
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
// Begin timing
stopwatch.Start();
// Tasks performed by method
// Stop timing
stopwatch.Stop();
Console.WriteLine("Time taken : {0}", stopwatch.Elapsed);
答案 2 :(得分:1)
首先,您需要创建一个秒表对象。
private readonly Stopwatch stopwatch = new Stopwatch();
然后,你的方法:
public void MyMethod()
{
stopwatch.Start();
// Any other code here.
stopwatch.Stop();
//returns longs
long runningTimeInMs = stopwatch.ElapsedMilliseconds;
}
答案 3 :(得分:1)
我这样做了
var watch = System.Diagnostics.Stopwatch.StartNew();
string startTime = DateTime.Now.ToLongTimeString();
//Insert Code Here
watch.Stop();
string timeEnd = DateTime.Now.ToLongTimeString();
//Time Format
string[] hours = watch.Elapsed.TotalHours.ToString().Split('.');
string[] minutes = watch.Elapsed.TotalMinutes.ToString().Split('.');
string[] seconds = watch.Elapsed.TotalSeconds.ToString().Split('.');
string[] milliseconds = watch.Elapsed.TotalMilliseconds.ToString().Split('.');
MessageBox.Show(hours[0].ToString() + ":" + minutes[0].ToString() + ":" + seconds[0].ToString() + "." + milliseconds[0].ToString());