gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:19:43 25 4
gpt4 key购买 nike

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

为什么 Haxe 在 SO 上的存在如此之少?其他所有语言都回答了这个问题 5 次以上...

最佳答案

由于没有人做过我发现的性能基准测试,我决定进行一项测试,以便 future 的 Haxe 程序员可以使用这些信息。

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

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

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

  • 测试过的数组、向量和 map ( map 只是为了好玩)。
  • 填写每一份要structure[i] = i其中 i 在 0...大小,大小在 [20, 100, 1000, 10000, 100000] 中,因此您可以找到适合您的大小。
  • 使用三种 for 循环类型测试每个大小的每个数据结构
    for (i in 0...size)
    for (item in array)
    while (i < size)

    在每个循环中,我执行了查找和赋值 arr[i] = arr[i] + 1;
  • 每个循环类型都在它自己的循环中 for (iter in 0...1000)以更准确地了解循环的执行方式。请注意,我只是将每个循环的时间加在一起,我没有求平均值或类似的东西。因此,如果一个数组需要 12 秒,那么平均执行一次实际上是 12/1000 => 0.012 秒。

  • 最后,这是我的基准测试(在 HaxeDevelop 中的 neko 调试中运行):
    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

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

    关于performance - 在 Haxe 中循环的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55538442/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com