String 字符串';是分裂还是性格
我正在写一个赌场游戏,我需要加密通过套接字传递的所有数据,所以我希望尽可能多的性能,因为加密和解密可能会发生很多,我不希望它太慢 我的问题是,当你有一个String 字符串';是分裂还是性格,string,actionscript-3,flash,String,Actionscript 3,Flash,我正在写一个赌场游戏,我需要加密通过套接字传递的所有数据,所以我希望尽可能多的性能,因为加密和解密可能会发生很多,我不希望它太慢 我的问题是,当你有一个String并且你想高速获取它的字符,myString.charAt(i)或者拥有var a:Array=myString.split(“”)时,哪个性能更快
String
并且你想高速获取它的字符,myString.charAt(i)
或者拥有var a:Array=myString.split(“”)时,哪个性能更快然后像这样得到它们a[i]代码>
我的for
循环可能运行60-100次或更多。提前感谢在代码执行之前和之后使用getTimer,您可以随时测试自己,看看在您的情况下什么更有效,以及它是否重要:
var testTime:int;
var before:int = getTimer();
//You code here
testTime = getTimer() - before;
trace(testTime);
因此,基本上,输入两个算法并检查执行所需的时间
编辑:启示录3自然是正确的。最好使用new Date.time()而不是getTimer(),因为它在冻结时更准确 通过在代码执行之前和之后使用getTimer,您可以始终测试自己,以查看在您的情况下什么更有效,以及它是否有意义:
var testTime:int;
var before:int = getTimer();
//You code here
testTime = getTimer() - before;
trace(testTime);
因此,基本上,输入两个算法并检查执行所需的时间
编辑:启示录3自然是正确的。最好使用new Date.time()而不是getTimer(),因为它在冻结时更准确 本比约的建议是可靠的。如果性能确实是一个问题,那么最好的测试用例是您实际使用代码的情况,尤其是因为垃圾收集和JIT'er使得实际性能无法预测
也就是说,charAt
方法通常比split()
快(20-50%)。内存方面应该没有太大区别——这两种方法都是为每个字符创建一个新字符串。除此之外,split()
显然还创建了一个额外的数组
这两种方法的比较:
字符:
var s:String = "";
for (var j:int = 0; j < len; j++)
{
// The string concat seems to be enough to confuse the JIT compiler.
s += v.charAt(j);
}
平均值=每次运行的平均时间(1000次迭代)
Min=单次运行的最短时间
Max=单次运行的最长时间
Iter=单个迭代的平均时间
运行之间的差异相当大,可能是由于某些运行期间发生了垃圾收集。但结果始终支持charAt()
。在每次运行之前调用一次split()
调用,而不是在每次迭代中重做调用,没有多大区别。换句话说,性能上的差异确实在于访问数组的速度比调用charAt()
慢。然而,使用indexOf
而不是正则表达式来搜索字符串并不是很大的区别
一般来说,虽然这不是一条硬性规定,但对于字符串操作这样的简单任务,最明显的方法可能是更快的方法。FlashPlayer团队花了大量时间优化字符串操作、连接等。benbjo的建议是可靠的。如果性能确实是一个问题,那么最好的测试用例是您实际使用代码的情况,尤其是因为垃圾收集和JIT'er使得实际性能无法预测
也就是说,charAt
方法通常比split()
快(20-50%)。内存方面应该没有太大区别——这两种方法都是为每个字符创建一个新字符串。除此之外,split()
显然还创建了一个额外的数组
这两种方法的比较:
字符:
var s:String = "";
for (var j:int = 0; j < len; j++)
{
// The string concat seems to be enough to confuse the JIT compiler.
s += v.charAt(j);
}
平均值=每次运行的平均时间(1000次迭代)
Min=单次运行的最短时间
Max=单次运行的最长时间
Iter=单个迭代的平均时间
运行之间的差异相当大,可能是由于某些运行期间发生了垃圾收集。但结果始终支持charAt()
。在每次运行之前调用一次split()
调用,而不是在每次迭代中重做调用,没有多大区别。换句话说,性能上的差异确实在于访问数组的速度比调用charAt()
慢。然而,使用indexOf
而不是正则表达式来搜索字符串并不是很大的区别
一般来说,虽然这不是一条硬性规定,但对于字符串操作这样的简单任务,最明显的方法可能是更快的方法。FlashPlayer团队花了大量时间优化字符串操作、连接等。好的,这是一个太多的评论
首先,很难说你想做什么,为什么你需要比较这些东西,但正如我已经说过的。如果您正在研究序列化,请学习使用内置序列化。当有人重新发明轮子的时候,我已经见过很多次了,它在每个可能的方面都要比内置的差几个数量级。这样做的唯一借口就是你在学习事情是如何运作的
当然,如果你打算处理数十万个文件,你可以用C语言编写,在AIR中使用本机扩展名或类似的东西,这肯定会成功
现在,如果您想知道处理字符串数据的最快方法,那将不是我们的选择。最快的方法是将其加载到域内存中,并使用所谓的“炼金术操作码”访问数据字节。如果字符串使用8位编码,这将非常快,而如果使用Unicode,则不会那么快。显然,如果您要测试之前建议的内容,这也会影响您的测试
第二个最佳选择:由整数组成的向量,它们是字符代码。这些都是更好的优化和使用不同