14
|
Andreas Rejbrand · 技术社区 · 14 年前 |
![]() |
1
19
回答这完全取决于如何构建随机字符串。我使用了一个修改过的代码版本,因为很少有人拥有rejbrandcomon单元,而且我想使用Excel完成我的分析(并制作漂亮的图片)。 代码(跳过代码查看一些结论): 项目3;
我做的
StrLen = SameStr 1 61527 69364 2 60188 69450 3 72130 68891 4 78847 85779 5 77852 78286 6 83612 88670 7 93936 96773 然后我把事情正常化了一点。每条线的最大值“1”和另一个值的百分比为1。结果如下: StrLen = SameStr 1 0,88 1 2 0,86 1 3 1 0,95 4 0,91 1 5 0,99 1 6 0,94 1 7 0,97 1
然后我开始玩
这就是原来的情况下的情节(CurrAtdioDrimStudio数组生成随机长度的字符串,长度为1到X轴上的任何内容)。蓝色是“=”运算符的结果,红色是“SameStr”的结果,越低越好。它清楚地表明SameStr()对于长度超过10个字符的字符串有一个边。 alt text http://fisiere.sediu.ro/PentruForumuri/V1_1_to_maxlen.png
下一次测试
alt text http://fisiere.sediu.ro/PentruForumuri/V1_equal_strings.png 现在真正的问题是,对于真正的代码,字符串相等的概率是多少?SameStr()获得地形的差异有多大?下一个文本,我正在构建两个字符串,第一个是StrLLN(X轴上的数字),第二个字符串具有Strel+Strand(4)的长度。同样,“=”运算符更好: alt text http://fisiere.sediu.ro/PentruForumuri/V1_rnd_p4.png 下一个测试,我有两个字符串,每个长度为:StrLen+Random(StrLen div 10)。“=”运算符更好。 alt text http://fisiere.sediu.ro/PentruForumuri/V1_rnd_pm_10p.png
... 我的最后一个测试,长度为正负50%的字符串。公式:StrLen+随机(StrLen div 2)。这个
alt text http://fisiere.sediu.ro/PentruForumuri/V1_rnd_pm_50p.png 结论我不确定。我没想到这和字符串长度有关!我希望这两个函数都能快速处理不同长度的字符串,但这不会发生。 |
![]() |
2
4
SameStr有一个可选的第三个参数:LocaleOptions。通过省略第三个参数(case sensitive locale-independent comparison),可以获得类似于“=”的行为。 你会认为这和二进制比较是一样的,但事实并非如此。 由于D2009 Delphi字符串除了长度和refcount之外还有一个“代码页”负载。
当你做一个
当您查看CompareStr(不带第三个参数的实现)的实现时,您可以看到这一点,在初始优化之后,CompareStr检查参数是否是unicode字符串,如果不是,则使用UStrFromLStr转换它们。 更新: 实际上,ustriqual(通过UStrCmp)也进行转换,就像CompareStr一样,它查看字符串的elemSize来决定它们是否是Unicode,如果不是,则进行转换。
所以编译器不使用SameStr(CompareStr)作为
很抱歉浪费了你的时间。不过,我要留下答案,这样其他人就不用走这条调查之路了。 |
![]() |
3
0
在我的系统中,“=”比SameStr快。 以“RandomString(0,0)”为例,SameStr的速度确实更快(大约20%)。但是,如果第二个字符串设置为“”,则性能几乎相同。经过更多的测试,似乎不是长度的不同导致性能的不同,而是空字符串。 Cosmin Prund刚刚发布了一个更深入的分析。。。 要记住的一件事是,对于这么小的函数( 在几毫秒内测试100万次),实际运行代码的处理器可能会有很大的不同。ASM代码对1个处理器的BPU可能比另一个更友好一些。。。或者某些指令可以在不同的CPU上更有效地运行。数据对齐可能会影响它。缓存未命中。这些只是硬件级别上可能影响最终性能的几个例子。 作为参考,我做的测试是在Phenom X4处理器上进行的。 |
![]() |
4
0
未来还会有一些测试:
不同文本:
同一文本:
结论:=在所有情况下都更快,但与同一文本相比几乎与=一样快。另外,CompareText/Str在处理Ansi字符串时似乎慢得多。 |
![]() |
Some1Else · 函数在Delphi中重新创建TForm 2 年前 |
![]() |
Agmcz · Delphi安卓库。so未安装(AAB) 3 年前 |
![]() |
nader · 如何使用delphi在web上提交表单 6 年前 |
![]() |
kwadratens · Delphi中的卡方分布函数代码 6 年前 |
|
user9672569 · 如何在完整的位图图像中绘制阴影效果? 6 年前 |
![]() |
mmmm · MSBuild(用于Delphi)Make-like功能 6 年前 |