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

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),所以不知道实现它是否是个好主意。

谢谢

最佳答案

想我刚刚解决了它。我查看了汇编输出,发现我有一个

for _, v := range c.Items

一个 Item 是一个相对较大的对象,所以我将上面的循环替换为
for index := 0; index < len(c.Items); index++

并使用像 c.Items[index] 这样的对象的直接访问。现在顶部显示:
350ms  4.85% 60.47%      350ms  4.85%  runtime.duffcopy

整体执行时间从 12 秒缩短到 4 秒。相当不错 :)

关于go - runtime.duffcopy 被称为很多,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45786687/

10-15 03:11