Appender和〜有什么区别?

Dmi*_*kov 1 arrays string d append

我已经读过如果我经常分配字符串我应该使用Appender,但是什么原理工作Appender~运算符不同?

两者(afaik)都使用GC进行内存分配.那么区别是什么呢?哪一个比另一个好?

Ada*_*ppe 5

所以它是替代的~=运营商appender,而不是那个~.~总是创建一个新的副本而不实际附加到现有的副本(它保留旧的副本),这使得它在性能很重要时通常应该避免的低效方便.

但无论如何,~=appender没有那么多不同.关键的区别在于~=它的容量缓存在GC中Appender随身携带它.如果您只是使用彼此接近的少量阵列,您可能不会注意到两者之间的差异.

但是,如果您正在做许多同时附加大量数组的阵列,或者做多线程的任何事情,那么Appender的本地容量存储将为您提供相当大的提升,因为它在向GC询问其容量时避免了全局锁定缓存并确保在不同阵列之间切换时不会破坏全局缓存.

Appender 也恰好是一个封装的输出范围,因此您可以将它传递给期望该接口的某些函数,尽管在大多数情况下您也可以使用常规数组进行正确的导入.

所以,如果你只是在一个循环中附加一个数组,继续使用~=,你可能不会注意到差异(事实上,我个人发现~=在这些情况下我们会快一点,但差别可以忽略不计使用优化构建)但是如果您正在存储appender本身(而不仅仅是最终结果)或者一次执行多个数组,或者编写多线程程序,那么Appender可以给你一个显着的提升,因为它避免了使用时的争用全局GC缓存.