将日期转换为小时/分钟/秒非常慢

时间:2011-04-29 04:27:22

标签: 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_second = storedNow.Second
time_ms = storedNow.Millisecond

但是,我发现这是一个性能问题。我已经使用分析器检查了源代码,而将Now转换为其组件似乎非常慢。是否有快速的方法将当前时间拆解成其组成部分?

1 个答案:

答案 0 :(得分:10)

看看Extremoptimization.com。关于这一点,有一些有趣的数学思想。这是一个可能的解决方案草图:

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倍。 但是,您仍然应该考虑您的方法,以及是否无法避免这种情况。