在 ASP.NET MVC 中获取 DateTime.UtcNow 的成本是多少?

How costly is it to fetch DateTime.UtcNow in ASP.NET MVC?

我有一个方法,一次调用将被调用 100 次,我可以选择如何调用 DateTime.UtcNow:

现在这个问题有了明显的答案,但现在我很好奇:获取 DateTime.UtcNow 的成本是多少?

默认情况下,系统时钟每 15 毫秒只更新一次,因此在您的方法中反复检查时间没有任何好处。有关计时器分辨率的更多信息 here

至于方法本身的效率 - check the reference source。它对 CLR 进行一次调用以获取文件时间。其余部分是优化 struct 上的高速操作。这不太可能花费大量时间。

DateTime.UtcNow 涉及一些工作和本地调用,因此并非完全微不足道。

但是,您正在做 I/O。无论您在做什么 I/O,任何 DateTime.UtcNow 调用都将与 I/O 完全相形见绌。在我的计算机上进行调试构建且没有编译器优化的简单测试(使用我的运行时版本、我的 Windows 版本等)表明我每秒可以进行七百万次 DateTime.UtcNow 调用。它甚至不使用任何 CPU。 DateTime 对象没有什么可以做的,这将明显更快。你把它保存在数据库中吗?这慢了几个数量级。你把它保存在一个文件中吗?同样,速度慢了几个数量级。你把它发回给客户吗?同样,速度慢了几个数量级。

因此,除非您需要在请求期间调用 DateTime.UtcNow 十万次,否则请着重于使代码易于理解。这可能意味着将 DateTime.UtcNow 存储在本地,或者在字段中或通过方法参数传递它;或者它可能意味着随时调用 DateTime.UtcNow。也许您甚至希望在同一个请求期间始终有相同的时间 - 这就是您的设计。

在您真正有理由担心之前,不要担心性能。