Roy*_*hoa 1 vbscript performance string-length asp-classic
我想知道如果我在使用循环列表10,000循环而不是在每个循环中计算它时将字符串长度存储在临时变量中,性能是否更好?
计算字符串长度的代码示例:
'--
Dim I
Dim str : str = "Lets say this string length is around 50,000"
'--
For I=0 To 100000
Response.Write Len(str) & "<br>"
Next
Run Code Online (Sandbox Code Playgroud)
使用临时变量的代码示例:
'--
Dim I
Dim str : str = "Lets say this string length is around 50,000"
Dim temp : temp = Len(str)
'--
For I=0 To 100000
Response.Write temp & "<br>"
Next
Run Code Online (Sandbox Code Playgroud)
你觉得哪个更好?
谢谢!
这是一个想法:你为什么不测量它?
Dim start: start = Timer
...<code here>...
Response.Write FormatNumber(Timer - start, 8)
Run Code Online (Sandbox Code Playgroud)
衡量就是知道.话虽如此:您可能想要阅读有关画家Shlemiel的故事.
最终,Response.write可能是最昂贵的操作; 如果你真的想测量Len()与临时变量的"成本"(即使两种方法都输出相同数量的数据),你应该做这样的事情:
Dim I, J, X
Dim start
Dim str : str = String(50000, "-")
Dim tmp : tmp = Len(str)
Response.Write "Temp var:<br>"
For J = 0 to 10
start = Timer
X = 0
For I=0 To 100000
x = x + tmp
Next
Response.write FormatNumber(Timer - start,8) & "<br>"
Next
Response.Write "Len:<br>"
For J = 0 to 10
start = Timer
X = 0
For I=0 To 100000
x = x + Len(str)
Next
Response.write FormatNumber(Timer - start,8) & "<br>"
Next
Run Code Online (Sandbox Code Playgroud)
在我的例子中,输出是:
Temp var:
0,03125000
0,03125000
0,04687500
0,03125000
0,03515625
0,02734375
0,03125000
0,03125000
0,03515625
0,02734375
0,03125000
Len:
0,04687500
0,04687500
0,03125000
0,04687500
0,04687500
0,04687500
0,05078125
0,02734375
0,04687500
0,05078125
0,04687500
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,使用Len()每次迭代都会慢得多(即使它不是那么多,大约35%).使用临时变量将是一个好主意,但你可能已经猜到,没有这些知识或测量,不是吗?
我不确定VBScript,但许多语言(及其编译器/ JIT'ers)在编译/ JIT时自己优化这些东西.编译器/运行时/ JIT通常会"注意到"这些模式并自动引入"临时变量".
但那么:你为什么要在(经典)ASP中对如此大量的数据进行数万次迭代呢?你真的要输出这么多数据吗?无法通过后端或其他事情(更多)完成处理?你在50Kb字符串上实际上做了10.000次迭代吗?或者这只是一个理论上的讨论?如果您正在对"简单的短字符串"进行一次或少量迭代,我根本不会考虑额外的变量.这引入了其他问题; 例如,如果str
变量改变等,必须保持变量"同步" .只要Len(foo)
你需要长度,你的可读性(以及"可理解性")就会得到改善.如果你确实引入了一个变量,这是合理的,有时是一个优化值的"麻烦",我至少会确保其名称正确(不是tmp
,但foolength
为例).
归档时间: |
|
查看次数: |
2698 次 |
最近记录: |