首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将代码放在单独的函数中可以提高性能?

如何将代码放在单独的函数中可以提高性能?
EN

Stack Overflow用户
提问于 2012-04-29 16:44:24
回答 2查看 136关注 0票数 4

我有一个稍微大的函数(大约80行代码,没有注释),我正在优化。

作为让分析器为我完成工作的一部分,我取下了2段代码,并将它们放在单独的函数中(这应该是临时的,直到我可以将它们放回)。

有趣的是:我的测试用例花费了29.8秒

在将第一个块放入单独的函数后,我看到了函数调用开销造成的小性能损失。(30.2秒)当我将第二个代码块放入一个单独的函数中时,我获得了相当大的性能增益,降至24.2秒

第二个代码块是插入到一个相当大的链接列表中,我计划用二叉树或什么来替换它,但是这20%的改进仍然让我非常困惑。

博士:试图优化代码,并注意到将代码块放入单独的函数中可以提高20%的性能。怎么可能?

编辑:在版本构建中也已确认运行

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-29 16:56:30

通过提取这段代码,函数变得更简单了。也许这有助于编译器高效地编译函数。它可能减轻了寄存器压力,因为局部变量较少。

有时候,这只是巧合。随机切换代码很可能会改变性能(在这两种情况下)。可能只是碰巧出现了改进而不是恶化。

为什么“抖动”改变性能?它可能会改变地址对齐,分支预测,编译器查看什么是热的,什么是冷的,CPU指令缓存的使用。

从语义的角度来看,所有这些都是实现细节。然而,它们会影响业绩。他们是相当不可预测的,因为他们的工作水平很低,而且非常复杂。

票数 6
EN

Stack Overflow用户

发布于 2012-04-30 10:28:12

没有代码示例,很难给出一个适当的解释,但usr的答案在大多数编程语言中是非常正确的。

然而,当涉及到Flash编译器时,我确实有自己的保留。根据经验,当函数调用开销很高时,自内联(与您所做的正好相反)通常是优化flash中函数的最佳方法之一。

尽管如此,我同意我们的观点,即局部变量较少很可能是您看到性能提高的原因。Flash没有块级作用域,这意味着在调用函数时,函数中声明的所有变量都被分配内存。如果第二个代码块声明了仅在该特定代码块中有用的变量,并且该代码有时只运行(如果是在If语句中),则可以解释性能提升的原因。

例如,您可以看到性能的提高:

代码语言:javascript
复制
public function foo() : void
{
    var bar : MyObj;
    //do stuff with bar

    if(someValuesAreTrue)
    {
        var jad  : oObj;
        var jad2 : oObj;
        //etc
        //do something with jad
    }
}

//changed to 
public function foo() : void
{
    var bar : MyObj;
    //do stuff with bar

    if(someValuesAreTrue)
    {
        subFunc();
    }
}
private function subFunc() : void
{
    var jad  : oObj;
    var jad2 : oObj;
    //etc
    //do something with jad
}

如果这不是您所处的情况,我会非常好奇地看到一些代码,因为它可以更好地洞察其他性能提升的替代方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10373908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档