1

我有以下代码将以下格式的字符串转换为
"G##"整数##

Dim str As String
Dim int As Integer
str = "G14"
int = CInt(Right(str, Len(str) - 1))

但这将定期在大型数据库上运行。

我想知道是否有任何可能更有效的替代方案(尤其是关于最后一行)?

4

2 回答 2

2

我针对 int = CInt(Mid$(str, 2)) 尝试了您的代码 100,000,000 次迭代,并且 Mid$ 语句稍快(在我的机器上为 6 秒),但这是很多迭代。但是,当我将$添加到您的 Right 函数时,它们以相同的速度运行。与变体版本相比,使用字符串函数Right$对字符串进行了更好的优化Right。所以唯一的建议是我必须使用字符串优化版本 Right$。

Dim str As String
Dim int As Integer
str = "G14"
int = CInt(Right$(str, Len(str) - 1))
于 2012-08-23T16:21:22.383 回答
2

在我的测试中使用

 Mid$(strTest, 1, 1) = "0"
 lngTest = CLng(strTest)

比使用快 30-40%

CLng(Right$(strTest, Len(strTest) - 1))

这反过来又比

CLng(Right(strTest, Len(strTest) - 1))

我使用Long它,因为它在速度方面非常出色Integer

对于多个替换,一个RegExp可能会成为它自己的。开销太高,无法证明此示例的合理性

测试代码

Sub Test()
Dim dbTime As Double
Dim strTest As String
Dim lngTest As Long
Dim lngCnt As Long

strTest = "G14"

dbTime = Timer
For lngCnt = 1 To 1000000
lngTest = CLng(Right$(strTest, Len(strTest) - 1))
Next lngCnt
Debug.Print Timer - dbTime

dbTime = Timer
For lngCnt = 1 To 1000000
lngTest = CLng(Right(strTest, Len(strTest) - 1))
Next lngCnt
Debug.Print Timer - dbTimer


dbTime = Timer
For lngCnt = 1 To 1000000
Mid$(strTest, 1, 1) = "0"
lngTest = CLng(strTest)
Next lngCnt
Debug.Print Timer - dbTime
End Sub
于 2012-08-24T00:14:14.553 回答