Vb.net 将日期转换为小时/分钟/秒的速度非常慢

Vb.net 将日期转换为小时/分钟/秒的速度非常慢,vb.net,optimization,Vb.net,Optimization,我需要一个日期循环转换成它的组成部分(小时,分钟,秒)。下面的代码很好地实现了这一点 Dim time_hour As Integer Dim time_minute As Integer Dim time_second As Integer Dim time_ms As Integer Dim storedNow As Date storedNow = Now time_hour = storedNow.Hour time_minute = storedNow.Minute time_sec

我需要一个日期循环转换成它的组成部分(小时,分钟,秒)。下面的代码很好地实现了这一点

Dim time_hour As Integer
Dim time_minute As Integer
Dim time_second As Integer
Dim time_ms As Integer
Dim storedNow As Date

storedNow = Now
time_hour = storedNow.Hour
time_minute = storedNow.Minute
time_second = storedNow.Second
time_ms = storedNow.Millisecond
但是,我发现这是一个性能问题。我已经用分析器检查了源代码,Now到其组件的转换似乎非常慢。有没有一种快速的方法可以将当前时间分解成它的组成部分?

看一看。关于这一点,有一些有趣的数学想法。下面是一个可能的解决方案示意图:

Dim ticks As Long
Dim time_hour As Integer
Dim time_minute As Integer
Dim time_second As Integer
Dim time_ms As Integer
Dim storedNow As Date

storedNow = Now
ticks = storedNow.Ticks
time_ms = CInt((ticks \ 10000) Mod 86400000)
time_hour = CInt(Math.BigMul(time_ms >> 7, 9773437) >> 38)
time_ms -= 3600000 * time_hour
time_minute = CInt(((Math.BigMul(time_ms >> 5, 2290650)) >> 32))
time_ms -= 60000 * time_minute
time_second = ((time_ms >> 3) * 67109) >> 23
time_ms -= 1000 * time_second
但是要小心。您的源代码将不可维护。这使您的转换非常可靠,但我不确定是否有其他人会理解您在第一个视图中所做的操作。奖励是一种转换,比经典方法快25倍左右。
但是,您仍然应该考虑您的方法,如果无法避免,请考虑。

定义难以置信的慢。1毫秒?1秒?这是一个反复发生的过程吗?如果是,目的是什么?可能你只是需要一种新的方法。我不能每秒调用(complete)方法超过50到100次。剖析器(AQtime)说,这消耗了最多的时间。为什么你需要每秒做50-100次呢?我并不是说你没有一个合理的理由,只是想看看你正在努力完成什么,以提供一种可能的替代方法。