String 在VBA/QTP中,字符串比较是如何工作的?是否内置了有效的字符串哈希函数?

String 在VBA/QTP中,字符串比较是如何工作的?是否内置了有效的字符串哈希函数?,string,vbscript,comparison,hash,qtp,String,Vbscript,Comparison,Hash,Qtp,我需要比较QTP中的两个非常大的字符串(我相信是由vba派生引擎编写的)。我知道这些字符串将超过100000个字符,我需要能够检测到其中一个大字符串何时发生变化。首先,我使用了以下方法: 如果prevtext当前文本,则 ... 如果结束 我原以为这会爆炸,但实际上脚本运行得相当快。在字符串比较期间没有明显的减速。因此,我怀疑字符串比较实际上是在我的作用域之外截断字符串,或者做一些其他可能是欺骗的事情。有人知道我是否可以依靠内置的字符串比较运算符来比较两个100000多个字符串吗?如果没有,我可

我需要比较QTP中的两个非常大的字符串(我相信是由vba派生引擎编写的)。我知道这些字符串将超过100000个字符,我需要能够检测到其中一个大字符串何时发生变化。首先,我使用了以下方法:

如果prevtext当前文本,则 ... 如果结束


我原以为这会爆炸,但实际上脚本运行得相当快。在字符串比较期间没有明显的减速。因此,我怀疑字符串比较实际上是在我的作用域之外截断字符串,或者做一些其他可能是欺骗的事情。有人知道我是否可以依靠内置的字符串比较运算符来比较两个100000多个字符串吗?如果没有,我可以用一些本机散列函数来替换它吗?它只需要能够检测到更改,而不是更改的内容,并且需要快速运行。

VBA将允许大约20亿个字符:

字符串比较,在任何一种正常的语言中,都是以线性时间运行的。散列算法不会提高字符串比较的速度,除非字符串只进行非常不频繁的更新,并且在更新时进行散列(与比较前进行散列相反)。这需要修改应用程序以包含字符串及其关联哈希的结构。

看起来没有任何优化(最明显的优化是检查字符串的长度是否相同)然而,当比较1000000个字符字符串时,它需要不到0.1秒的时间,所以我认为您不应该担心100K个字符字符串

我是这样测试的

base = String(1000000, "x")
first = base & "a"
sameLength = base & "b"
differentLength = base & "cd"

MercuryTimers.Timer("x").Start
diff = first <> sameLength
print "sameLength = " & diff & " after " & MercuryTimers.Timer("x").ElapsedTime
MercuryTimers.Timer("x").Reset

MercuryTimers.Timer("x").Start
diff = first <> differentLength
print "differentLength = " & diff & " after " & MercuryTimers.Timer("x").ElapsedTime
MercuryTimers.Timer("x").Reset
base=String(1000000,“x”)
第一个=基础和“a”
SameleLength=基准和“b”
differentLength=基准和“cd”
MercuryTimers.定时器(“x”).启动
差异=第一个采样长度
打印“SameleLength=“&diff&”在“&MercuryTimers.Timer(“x”).ElapsedTime”之后
MercuryTimers.定时器(“x”).重置
MercuryTimers.定时器(“x”).启动
差异=第一个差异长度
打印“differentLength=“&diff&”在“&MercuryTimers.Timer(“x”).ElapsedTime”之后
MercuryTimers.定时器(“x”).重置
定时输出大致相同,这是一个典型的输出(时间单位为毫秒)

SameleLength=40后为真
差值长度=30后为真


QTP是基于VBScript(不是VBA)的。我会更新您的标记。一个明显的优化是检查字符串的长度是否相同(对于获取长度为
O(1)
的字符串,如Java、.NET、C++
std::string
等)。VBScript肯定不是所有语言中最明智的:\