Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET秒表-性能惩罚_C#_.net_Stopwatch - Fatal编程技术网

C# .NET秒表-性能惩罚

C# .NET秒表-性能惩罚,c#,.net,stopwatch,C#,.net,Stopwatch,可能的重复项: 我有需要尽可能快地运行的代码。为了能够记录执行时间,我使用了类。我怀疑秒表可能会对演出产生不良影响。也许使用日期时间差可能更有效 你认为哪一个性能更好 Stopwatch sw = new Stopwatch(); sw.Start(); int a = 5; // Critical lines of code long elapsedMs = se.Elapsed.TotalMilliseconds; 或 我认为,就性能而言,第二种方法会更有效,正如评论中的链接所示,

可能的重复项:

我有需要尽可能快地运行的代码。为了能够记录执行时间,我使用了类。我怀疑秒表可能会对演出产生不良影响。也许使用日期时间差可能更有效

你认为哪一个性能更好

Stopwatch sw = new Stopwatch();
sw.Start();
int a = 5;

// Critical lines of code

long elapsedMs = se.Elapsed.TotalMilliseconds;


我认为,就性能而言,第二种方法会更有效,正如评论中的链接所示,如果您想测量秒以下的时间,那么DateTime将不准确,尽管它会更有效


我这样认为是因为StopWatch会连续测量滴答声,而DateTime只保存一个DateTime实例,即startTime。

由于分析代码只执行一次,其性能影响应该可以忽略不计。只有在内部循环/关键代码路径中调用秒表时才会出现问题

GetTickCount()
应该是最快的评测方法之一,但它的精确度只有几毫秒。
GetTickCount()
Windows API函数只检查一个简单变量(每隔几毫秒更新一次);它的成本是本机方法调用的成本,仅此而已。它以
Environment.TickCount
的形式公开。但正如我所说,我怀疑这一点
DateTime.UtcNow/Now
GetTickCount
具有相同(低)的精度


从理论上讲,可能会对抖动产生一些影响,但这不太可能。

我认为,如果你只调用几次,这并不重要,但是,一切都取决于你要求的准确度
Stopwatch
更精确,因为它依赖于
QueuePerformanceCounter
API,所以它使用了更高的分辨率。

Stopwatch
在调用
Start
Stop
之间没有做任何事情。。。启动时它只存储当前时间戳(通过
QueryPerformanceCounter
),停止时将其与当前时间戳进行比较。因此,它没有理由会影响代码的性能,至少不会显著影响代码的性能
Stopwatch
专为精确的时间测量而设计,因此您可以确保它经过了彻底优化。它也比比较
DateTime的连续值精确得多

答案实际上取决于你想要达到的精度。对于大于秒的精度,秒表是一种更好的方法,因为它使用了比日期时间更精确的测量系统。 看


从性能的角度来看,我怀疑Start()和DateTime之间的差异有多大。现在存储来自相应测量系统的值,并在检索毫秒时计算差异并转换(根据需要)对于相应的测量单位

。无关紧要的差异。如果您试图以所需的精度衡量性能,请参见
DateTime
,这可能非常不准确。你也是;如果你的结果很重要,那么你可以把
DateTime
排除在外。我不明白这怎么会是完全重复的。我怀疑它的声誉收集活动是为了标记重复的问题并关闭它们。这不是重复的其他问题。这个问题是关于通话的开销。其他问题只是关于返回信息的准确性。第一句正确的+1。获取当前日期时间只是从内存中读取计数器。但是,正如您所说,性能不是这里要考虑的正确指标,而是它的准确性。问题还在于秒表在Start()和Stop()调用中做什么,以及这对应用程序有何影响。VS2013 Performance Analyzer显示Stopwatch.Stop()浪费了大约0.92%(应用程序在每次查询之前执行80000个sql查询、1thread、sw.Start()/sw.Stop())我想要的解释。
DateTime startDate = DateTime.Now;
int a = 5;

// Critical lines of code

long elapsedMs = DateTime.Now.Subtract(startDate).TotalMilleseconds;