我不是Java专家; 我希望这个名单上有更多精通Java的人可以帮助我.
我当前的服务器上有以下代码.
<cfset var buffer = CreateObject("java", "java.lang.StringBuffer").init("") />
<cfset buffer.append(variables.myVar) />
Run Code Online (Sandbox Code Playgroud)
我试图将这些代码移动到另一台服务器.问题是这个新服务器(共享主机)不允许调用Java对象.所以,我把它们改成了以下几点.
<cfset var buffer = "" />
<cfset var buffer = buffer & variables.myVar />
Run Code Online (Sandbox Code Playgroud)
我的问题是,新代码是否与旧代码相当?使用java.lang.StringBuffer有什么好处?
在此先感谢,Monte
不,当在重循环中使用时,"新"代码效率较低.
您可以使用数组模拟StringBuffer.
<cfset var buffer = ArrayNew(1)>
<cfset ArrayAppend(buffer, variables.myVar1)>
<cfset ArrayAppend(buffer, variables.myVar2)>
<!--- more of these --->
<cfset result = ArrayToList(buffer, "")>
Run Code Online (Sandbox Code Playgroud)
但是:如果你没有连续连接数百或数千个字符串,那么使用StringBuffer几乎没有什么好处.你可以&在大多数情况下使用.
我做了一些测试(在Java 1.4的ColdFusion 7服务器上,更新的版本可能得分不同).
所有时间都是毫秒.结果平均超过10次重复(除了方括号中的一个,因为这几乎是永远的).
以下是迭代连接单个字母 N次的测量.
iterations concat array cfsave string
content buffer
100 0 0 0 2
1000 4 4 2 22
10000 168 29 33 219
100000 30,781 168 293 1,575
以下是迭代连接长度为10 N次的字符串的结果:
iterations concat array cfsave string
content buffer
100 0 0 0 4
1000 25 0 2 24
10000 1,242 33 31 232
100000 [410,979] 180 373 2,082
请注意,当您执行的迭代越多以及字符串获得的时间越长,基本字符串连接如何变得越来越低效.其他方法显示更多的线性行为.
进一步注意StringBuffer的性能也与其初始大小有关.如果你将它的尺寸设置得太小(例如通过调用init("")而不是调用.init(10000)),那么当它用完时它会被迫重新分配更多的空间,这也需要时间.为了测试,我用它所需的空间量初始化它.
| 归档时间: |
|
| 查看次数: |
1015 次 |
| 最近记录: |