Appender和〜有什么区别?

时间:2017-04-19 12:41:04

标签: arrays string append d

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

对于内存分配,它们(afaik)都是use GC。那么区别是什么呢?哪一个比另一个好?

1 个答案:

答案 0 :(得分:5)

因此~=替换appender运算符,而不是~运算符。 ~总是创建一个新的副本,而不是实际附加到现有的副本(它使旧的副本保持不变),这使得当性能很重要时,通常应该避免这种低效的方便。

但无论如何,~=appender实际上并没有那么大的不同。关键区别在于~=将其容量缓存保留在GC中,而Appender随身携带它。如果您只是使用彼此靠近的少量阵列,您可能不会注意到两者之间的差异。

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

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

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