在分析我的应用程序并运行 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/