Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 在Haxe中循环最有效的方法是什么?_Performance_Loops_Haxe - Fatal编程技术网

Performance 在Haxe中循环最有效的方法是什么?

Performance 在Haxe中循环最有效的方法是什么?,performance,loops,haxe,Performance,Loops,Haxe,我找不到任何关于Haxe中循环之间实际性能差异的信息。他们提到Vector有一些速度优化,因为它是固定长度的。在对象上循环的最佳方式是什么?它是否取决于iterable对象(例如数组vs.向量vs.贴图) 为什么Haxe在so上很少出现?每个其他语言都对这个问题回答了5次…因为没有人做过我发现的性能基准测试,所以我决定运行一个测试,以便将来的Haxe程序员可以获得这些信息 第一个注意事项:如果您不经常运行循环,那么它非常快,对性能几乎没有影响。因此,如果只使用数组更容易,那么就这样做。只有当你一

我找不到任何关于Haxe中循环之间实际性能差异的信息。他们提到Vector有一些速度优化,因为它是固定长度的。在对象上循环的最佳方式是什么?它是否取决于iterable对象(例如数组vs.向量vs.贴图)


为什么Haxe在so上很少出现?每个其他语言都对这个问题回答了5次…

因为没有人做过我发现的性能基准测试,所以我决定运行一个测试,以便将来的Haxe程序员可以获得这些信息

第一个注意事项:如果您不经常运行循环,那么它非常快,对性能几乎没有影响。因此,如果只使用数组更容易,那么就这样做。只有当你一遍又一遍地运行和/或它真的很大时,性能才会受到影响

事实证明,您的最佳选择主要取决于您的数据结构。我发现,当执行for-each样式的循环而不是标准的for-loop或while循环时,数组往往会更快。在小尺寸的情况下,数组基本上和向量一样快,所以在大多数情况下,您不需要担心使用哪一个。但是,如果您使用的是相当大的数组,那么切换到向量将非常有益。如果使用矢量,则使用标准for或while循环本质上是等效的(尽管while的触摸速度更快)。映射速度也相当快,尤其是在避免foreach循环的情况下

为了得出这些结论,我首先在以下条件下测试了回路:

  • 测试了阵列、矢量和贴图(贴图只是为了好玩)
  • 将每一个填充为
    structure[i]=i
    ,其中i的大小为0…大小为[20,100,1000,10000,100000],这样您就可以找到适合自己的大小
  • 使用三种for循环类型在每个大小上测试每个数据结构
    for (i in 0...size)
    for (item in array)
    while (i < size)
    

    希望这能帮助那些担心性能和Haxe以及需要使用大量循环的人。

    您在哪些目标上完成了这些基准测试?这可能非常重要。仅在neko上,在HaxeDevelop中启用debug,所以我想这不是最详尽的基准测试。neko目前基本上只在向后兼容方面存在,HashLink是其继承者。。。所以我不确定这些数字的相关性。我认为在一些/大多数目标中,(列表中的v)的正常
    被编译成
    循环。在任何情况下,我都会尽可能地使用普通循环,在大多数现实生活中,这不是循环的性能问题,而是循环中发生的事情。好的一点@MarkKnol,循环本身是非常优化的,内部发生的是缓慢的部分。我有一些代码要从AS3移植到Haxe,这些代码有很多简单的for循环,我试图弄清楚要将它们转换成什么样的数据结构和循环类型,所以我决定进行研究,但没有发现任何东西,因此发表了这篇文章。
    
    Running test on size 20:
    
    for (i...20) x 1000
        Array : 0.0019989013671875
        Vector : 0
        Map : 0.00300025939941406
    
    for each(i in iterable) x 1000
        Array : 0.00100135803222656
        Vector : 0.00099945068359375
        Map : 0.0209999084472656
    
    while (i < 20) x 1000
        Array : 0.00200080871582031
        Vector : 0.00099945068359375
        Map : 0.0019989013671875
    
    
    Running test on size 100:
    
    for (i...100) x 1000
        Array : 0.0120010375976563
        Vector : 0.0019989013671875
        Map : 0.0120010375976563
    
    for each(i in iterable) x 1000
        Array : 0.00600051879882813
        Vector : 0.00299835205078125
        Map : 0.0190010070800781
    
    while (i < 100) x 1000
        Array : 0.0119991302490234
        Vector : 0.00200080871582031
        Map : 0.0119991302490234
    
    
    Running test on size 1000:
    
    for (i...1000) x 1000
        Array : 0.11400032043457
        Vector : 0.0179996490478516
        Map : 0.104999542236328
    
    for each(i in iterable) x 1000
        Array : 0.0550003051757813
        Vector : 0.0229988098144531
        Map : 0.210000991821289
    
    while (i < 1000) x 1000
        Array : 0.105998992919922
        Vector : 0.0170001983642578
        Map : 0.101999282836914
    
    
    Running test on size 10000:
    
    for (i...10000) x 1000
        Array : 1.09500122070313
        Vector : 0.180000305175781
        Map : 1.09700012207031
    
    for each(i in iterable) x 1000
        Array : 0.553998947143555
        Vector : 0.222999572753906
        Map : 2.17600059509277
    
    while (i < 10000) x 1000
        Array : 1.07900047302246
        Vector : 0.170999526977539
        Map : 1.0620002746582
    
    
    Running test on size 100000:
    
    for (i...100000) x 1000
        Array : 10.9670009613037
        Vector : 1.80499839782715
        Map : 11.0330009460449
    
    for each(i in iterable) x 1000
        Array : 5.54100036621094
        Vector : 2.21299934387207
        Map : 20.4000015258789
    
    while (i < 100000) x 1000
        Array : 10.7889995574951
        Vector : 1.71500015258789
        Map : 10.8209991455078
    
    
    total time: 83.8239994049072