swift 与“AnyPublisher”相比,使用“some/any Publisher”是否有性能差异或其他缺点?

xxls0lw8  于 2023-03-22  发布在  Swift
关注(0)|答案(1)|浏览(190)

我们的代码库有大约800个函数返回AnyPublisher<Type, Error>,因为我想使用特定于语言的功能,我找不到任何资源或参考来比较使用any Publishersome Publisher作为替代品的性能或缺点。
有没有什么有效的方法可以最终自己测试呢?

lawou6xi

lawou6xi1#

对于任何性能问题,最好的经验法则是“用分析器试试看”。如果你怀疑有性能问题,那么在仪器中运行一些测试。
如果不深入研究苹果是如何实现any PublisherAnyPublisher的,一般来说很难回答你的问题。根据我的经验,这种类型擦除涉及到,抽象地说,把一个完全类型化的实体放在一个“盒子”中,也就是说,把它 Package 在一个间接层中。
任何想要访问盒子里的东西的代码都必须经过这个间接层,这个额外的间接层可能会在调用时间和内存的绝对性能方面有(小)成本。
相比之下,使用some Publisher最常见的情况是当你有一个泛型函数:func doSomething<T: somePublisher>(firstArg: T)。在这种情况下,编译器将为每种类型生成一个特定版本的doSomething。我希望没有额外的间接层,所以调用时间不应该受到影响。但是你的代码会更大。
你自己测试它的最“有效”的方法是使用仪器中的broilers。你一定会在内存大小和运行速度之间进行权衡......这是一个经典的计算机科学问题。
值得一提的是,苹果自己也警告过使用存在性(即any <Protocol>)可能会带来的性能损失。他们的建议和你在这里得到的一样--如果你担心它,就使用分析器。

相关问题