我是不是需要明确停止其引用已重新分配的代码?
Posted
技术标签:
【中文标题】我是不是需要明确停止其引用已重新分配的代码?【英文标题】:Do I need to explicitly stop a ticker whose reference has been reassigned?我是否需要明确停止其引用已重新分配的代码? 【发布时间】:2017-03-28 18:55:10 【问题描述】:我使用time.Ticker
定期做一些事情。我希望能够更改stuff
发生的频率:
for
select
case <-ticker.C:
//do stuff
case t := <-newTicker:
oldTicker := ticker
ticker = t
oldTicker.Stop()
我是否需要清理代码以避免内存泄漏,或者将重新分配ticker
像
case ticker := <-newTicker:
够了吗?
【问题讨论】:
来自文档“停止代码以释放相关资源。” 【参考方案1】:正如JimB
提到的time
包GoDoc。
在time.NewTicker
下,提到了以下内容。
停止代码以释放相关资源。
如果您运行 oldTimer.Stop()
,oldTicker
将在退出 case 语句后被垃圾回收,因为它超出了范围。
【讨论】:
在这种情况下,尝试关闭频道会出现以下错误:cannot close receive-only channel
。 This question 表示不必关闭每个通道,垃圾收集器会发现oldTicker.C
可以被清理。我担心的是,如果这运行一段时间,将会有很多 oldTicker
s 留在周围。
很抱歉。您链接到的答案是正确的。 'timer.C' 是一个只接收频道<-chan Time
。答案的最后一部分是错误的。以上是关于我是不是需要明确停止其引用已重新分配的代码?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我需要将默认引用参数定义为 const 以便我可以为其分配左值? [复制]
读卡器,由于该设备有问题,Windows 已将其停止。 (代码 43)