runtime.duffcopy被称为很多

时间:2017-08-20 20:52:06

标签: go

在分析我的应用程序并运行顶部时,我看到了

Showing top 10 nodes out of 31 (cum >= 0.12s)
      flat  flat%   sum%        cum   cum%
    13.93s 63.00% 63.00%     13.93s 63.00%  runtime.duffcopy

我很难知道它何时以及为何被调用,以及是否有什么可以改善这一点?您是否需要查看这些调用所在的函数,或者是否有任何我应该考虑的一般经验法则?

我已经读过,命名的返回值可以改善这一点,但它在测试很多条件(返回true或false)时非常重要,所以不知道实现它是否是一个好主意。

由于

1 个答案:

答案 0 :(得分:2)

想想我刚解决了。我看了一下装配输出,发现我有一个

for _, v := range c.Items

一个Item是一个相对较大的对象,所以我用

替换了上面的循环
for index := 0; index < len(c.Items); index++

并使用直接访问对象,如c.Items [index]。 Top现在显示:

350ms  4.85% 60.47%      350ms  4.85%  runtime.duffcopy

整体执行时间从12秒减少到4秒。非常好:))