2012-04-15 193 views
8

我正在从ActionScript3.0(Flex)向C#(WPF)移植应用程序.AS3.0有一个方便的实用程序getTimer(),它以毫秒为单位返回自Flash虚拟机启动以来的时间。通过类在C#中搜索作为获取自应用程序启动以来的运行时间

DateTime 
DispatcherTimer 
System.Diagnostics.Process 
System.Diagnostics.Stopwatch 

,但发现没有像this.It似乎me.For例如Unity3D一个非常基本的功能,它可以运行在Mono提供了一些熟悉的东西。我在这里错过一些实用工具吗?

在此先感谢。

回答

26

Process.GetCurrentProcess().StartTime是你的朋友。

..所以获得经过的时间开始:

DateTime.UtcNow - Process.GetCurrentProcess().StartTime.ToUniversalTime() 

另外,如果你需要更高的清晰度,System.Diagnostics.Stopwatch可能是可取的。如果是这样,你的应用程序启动时启动秒表:

Stopwatch sw=Stopwatch.StartNew(); 

那么你的执行运行期间查询sw.Elapsed财产。

+0

是否选择其中一个不是精确度问题,而是需求问题。 'Process.GetCurrentProcess()。StartTime'永远不会在'Stopwatch.StartNew()'同时被调用!所以这取决于用户何时开始计时。 :) – 2012-04-15 10:34:38

+0

您确定Process.GetCurrentProcess返回自应用程序启动以来的时间?我刚刚做了一个检查:(DateTime.Now -Process.GetCurrentProcess()。StartTime).TotalSeconds。在应用程序启动的那一刻,我打印出控制台的时间。它从16-17秒开始。显然太多了,因为该应用程序最多需要4秒才能启动。 – 2012-04-15 10:44:37

+0

有趣。该文件似乎与我同意。如果真的如此,我会说这是值得的一个新问题。 – spender 2012-04-16 08:22:04