请老师看看,能否再优化一下,缓存函数! 谢谢!
Private Const 缓存长度 = 50
Private Static Function py缓存(字 As String) As String
py缓存 = ""
If 字 = "" Then Exit Function
Dim sz(1 To 2, 0 To 缓存长度) As String, i As Integer
For i = 1 To 缓存长度
If sz(1, i) = 字 Then
命中数 = 命中数 + 1
GoTo 命中
End If
'If sz(1, i) = "" Then GoTo 无命中
Next i
无命中:
i = 缓存长度 '无命中 视同 末尾命中 处理
sz(1, i) = 字
sz(2, i) = pychar(字) '读表
命中:
py缓存 = sz(2, i)
If i = 1 Then Exit Function '第一个命中,不改变数组
sz(1, 0) = sz(1, i) '倒腾数据 “sz(1, 0)” 作为中转位置
sz(2, 0) = sz(2, i)
For i = i To 1 Step -1 '重排缓存
sz(1, i) = sz(1, i - 1)
sz(2, i) = sz(2, i - 1)
Next i
End Function
自行优化了一下(改成了long数组),最终运行时间只要4.6秒 代码
Private Static Function py缓存(字 As String) As String '
py缓存 = ""
If 字 = "" Then Exit Function
Dim sz(1 To 2, 0 To 缓存长度) As Long, bm As Long, i As Integer, 尾 As Integer
For i = 1 To 尾
If sz(1, i) = Asc(字) Then
命中数 = 命中数 + 1
GoTo 命中
End If
Next i
无命中:
尾 = 尾 + 1
If 尾 > 缓存长度 Then 尾 = 缓存长度
'限制长度
sz(1, 0) = Asc(字)
py缓存 =
pychar(字) '读表
If py缓存 = "" Then '空字符用0 代表
bm = 0
Else
bm = Asc(py缓存)
End If
sz(2, 0) = bm
i = 尾
'无命中 视同 末尾命中 处理
GoTo 重排
命中:
bm = sz(2, i)
If bm = 0 Then
py缓存 = ""
'空字符用0 代表
Else
py缓存 = Chr(bm)
End If
If i = 1 Then Exit Function
'第一个命中,不改变数组
sz(1, 0) = sz(1, i)
'倒腾数据 “sz(1, 0)” 作为中转位置
sz(2, 0) = sz(2, i)
重排:
For i = i To 1 Step -1
'重排缓存
sz(1, i) = sz(1, i - 1)
sz(2, i) = sz(2, i - 1)
Next i
End Function
消灭零回复!
总记录:4篇 页次:1/1 9 1 :