在C ++中,我可以获取应用程序启动时的当前时间,我可以使用
time_t appStartTime = time(null);
然后找到它开始时的秒数差异我可以做同样的事情,然后找出差异。看起来我应该在C#net中使用“System.DateTime”,但是MSDN的解释很混乱。
如何使用System.DateTime查找应用程序启动时间与当前时间之间的时间差(以秒为单位)?
答案 0 :(得分:6)
立即使用属性
DateTime startTime = DateTime.Now;
//work
DateTime currentTime = DateTime.Now;
然后只是计算差异。
currentTime - startTime;
如果您想衡量效果,请考虑使用Stopwatch。
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
//work
stopWatch.Stop();
答案 1 :(得分:2)
正如大家所说......但他们有点不对劲:-)使用DateTime.UtcNow
,因为
DateTime.Now
来电DateTime.UtcNow
)OR
正如@Shekhar_Pro建议的那样(是的,他是对的!),使用秒表
var sw = Stopwatch.StartNew()
.... your code
sw.Stop();
var ms = sw.ElapsedMilliseconds;
或
var ticks = sw.ElapsedTicks;
哦......我忘记了......在某些情况下你所做的事情可能毫无价值......你知道,2011年处理器是多核的(甚至是2010 :-))...如果你的应用程序模糊不清多线程你可能更好测量:
Process.GetCurrentProcess().TotalProcessorTime
这包括使用您的应用程序使用的所有核心...因此,在使用两个核心的双核心上,每“实时”秒将“获得”2秒。
答案 2 :(得分:1)
如果您使用它来检查执行代码的性能和时间,那么最好的办法是使用StopWatch
。
否则System.DateTime有一个Subtract函数,可用于获取TimeSpan对象,甚至是一个简单的-
(减法)运算符。
然后,该TimeSpan对象具有可以使用的TotalSeconds属性。
答案 3 :(得分:1)
有几种方法可以做到这一点:
使用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都具有足够的准确性。
答案 4 :(得分:0)
DateTime startTime = DateTime.Now;
//some code
TimeSpan difference = DateTime.Now - startTime;
int seconds = difference.TotalSeconds.Truncate();