繁体   English   中英

使用c#System.DateTime就像c ++ time_t一样

[英]Using c# System.DateTime like c++ time_t

在C ++中,我能够获得我的应用程序启动时可以使用的当前时间

time_t appStartTime = time(null);

然后找到它开始时的秒数差异我可以做同样的事情,然后找出差异。 看起来我应该在C#net中使用“System.DateTime”,但MSDN的解释令人困惑。

如何使用System.DateTime查找应用程序启动时间与当前时间之间的时间差(以秒为单位)?

使用Now属性

DateTime startTime = DateTime.Now;

//work

DateTime currentTime = DateTime.Now;

然后只是简单地计算差异。

currentTime - startTime;

如果您想测量性能,请考虑使用秒表

    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();

    //work

    stopWatch.Stop();

正如大家所说......但是他们有点不对劲:-)使用DateTime.UtcNow ,因为

  • 它更快( DateTime.Now调用DateTime.UtcNow
  • 它适用于开启/关闭DST的更改。

要么

正如@Shekhar_Pro建议的那样(是的,他是对的!),使用秒表

var sw = Stopwatch.StartNew()
.... your code
sw.Stop();
var ms = sw.ElapsedMilliseconds;

要么

var ticks = sw.ElapsedTicks;

哦......我忘记了...在某些情况下你所做的事情可能毫无价值......你知道,2011年的处理器是多核的(甚至是2010 :-))...如果你的应用程序模糊多线程你就是可能更好的测量:

Process.GetCurrentProcess().TotalProcessorTime

这包括使用您的应用程序使用的所有核心...因此,在使用两个核心的双核心上,每“实时”秒将“获得”2秒。

如果您使用它来检查执行代码的性能和时间,那么您最好的选择是使用StopWatch

否则System.DateTime有一个Subtract函数,可用于获取TimeSpan对象,甚至是一个简单的- (减法)运算符也可以。 然后,TimeSpan对象具有可以使用的TotalSeconds属性。

几种方法:

  • 使用DateTime.Now。 减法生成TimeSpan。 采用8字节存储,时间长达8000年,分辨率为1毫秒,但在大多数机器上精确到1/64秒。

  • 使用Environment.TickCount。 与time_t类似,但与机器启动时间相关。 占用4个字节的存储空间,最多24天(演员阵容为49),分辨率和准确度与DateTime相同。

  • 使用秒表。 存储在堆上,分辨率取决于机器,但几乎总是低于一微秒。 准确性通常不是很好,但重复得体,假设+/- 5%。 最好用于测量小间隔以进行比较。

  • 使用timeGetTime。 这需要pinvoke使用这个多媒体计时器。 与Environment.TickCount类似,使用timeBeginPeriod可以获得1毫秒的精度。 这不便宜,因为它具有系统范围的效果。 最好避免。

请记住,流程执行受整体操作系统负载的影响,您的程序正在与正在运行的其他70多个进程共享资源。 DateTime或TickCount都具有足够的准确性。

DateTime startTime = DateTime.Now;
//some code
TimeSpan difference = DateTime.Now - startTime;
int seconds = difference.TotalSeconds.Truncate();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM