用Instruments进行Swift性能分析,_swift_retain_到底是什么?

7
我正在使用Instruments对我的Swift iOS应用进行性能分析。大量时间花在下面这个地方:

_swift_retain_(swift::HeapObject*) libSwiftCore.dylib

并且

_swift_release_(swift::HeapObject*) libSwiftCore.dylib

我的代码大多是创建(并超出范围)结构体和元组。我理解由于它们是值对象,它们被分配在栈上,因此我不应该看到太多的堆操作。

_swift_retain__swift_release_具体是什么意思?


1
这些函数 _swift_retain__swift_release_Swift 自动引用计数 (ARC) 的一部分。有关详细信息,请参见 stdlib 中的源代码。ARC 似乎经常因性能问题而受到抱怨,例如此问题,但我很惊讶您仅使用值类型就看到了这种行为。然而,谁知道 ARC 在幕后做了什么... - dfrib
嗯,它说“引用计数仅适用于类的实例”,我一定有一个频繁重新分配的类。 - Steve Kuo
是的,同样的句子让我对你的情况感到困惑,因为你说你主要有值类型。 - dfrib
@dfri 如果您将您的评论转移到答案中,我可以将其标记为已回答。 - Steve Kuo
我将它添加为注释,主要是因为我认为它不够详细,不能作为答案。无论如何,根据您的请求,我会在下面添加它。可能其他人会看到这个线程并给出更详细和具体的答案。 - dfrib
1
你没有提到那些结构体中包含了什么。如果它们包含对象,那么肯定会有ARC活动。 - pauln
1个回答

3

这些函数_swift_retain__swift_release_Swift自动引用计数(ARC)的一部分。有关详细信息,请参见stdlib中的源代码。在性能问题方面,ARC似乎经常受到抱怨,例如这个问题,但我很惊讶你只使用值类型就能看到这种行为。然而,可能这是由于ARC在幕后做了一些事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接