关于 vue 内存泄露问题?
我有 A B 两个页面,互相切换(未使用 keep-alive
)
发现在 B 页面,会有内存泄露的问题
看下大致代码
B.vue
mounted () {const list = [...this.$store.state.list]list.push({ vm: this})this.$store.dispatch('updateList', list)}
问题原因应该是, 把当前 vue 实例 push 到了 store,导致数组劫持了 this 的引用
我的解决方案如下
B.vue
mounted () { const list = [...this.$store.state.list] list.push({ vm: this }) this.$store.dispatch('updateList', list)},beforeDestroy () { const list = this.$store.state.list const index = list.findIndex(item => item.vm === this) if (index !== -1) { list.splice(index, 1) } this.$store.dispatch('updateList', list)}
这样能成功释放内存,我用 chrome devtools 手动回收后, DOM 节点也能成功降下来 511
但是后来发现说不要直接操作 store 所以我改成了下面的形式
B.vue
mounted () { const list = [...this.$store.state.list] list.push({ vm: this }) this.$store.dispatch('updateList', list)},beforeDestroy () { this.$store.dispatch('spliceVm', this)},
store.js
mutations: { SET_LIST (state, data) { state.list = data }, SPLICE_VM (state, vm) { const list = state.list const index = list.findIndex(item => item.vm === vm) if (index !== -1) { list.splice(index, 1) } state.list = list }},actions: { spliceVm ({ commit }, data) { commit('SPLICE_VM', data) }, updateList ({ commit }, data) { commit('SET_LIST', data) }},
这样却释放不了内存,DOM 节点也在持续上升到了557
, 请问我问题出在哪里?
B.vuemounted () { const list = [...this.$store.state.list] list.push({ vm: this }) this.$store.dispatch('updateList', list)},beforeDestroy () { this.$nextTick(() => { this.$store.dispatch('spliceVm', this) })}store.jsmutations: { SET_LIST (state, data) { state.list = data }, SPLICE_VM (state, vm) { const list = state.list const index = list.findIndex(item => item.vm === vm) if (index !== -1) { list.splice(index, 1) } state.list = [...list] // 用浅拷贝状态更新 }},actions: { spliceVm ({ commit }, data) { commit('SPLICE_VM', data) }, updateList ({ commit }, data) { commit('SET_LIST', data) }}
本文向大家介绍ThreadLocal 内存泄露问题?相关面试题,主要包含被问及ThreadLocal 内存泄露问题?时的应答技巧和注意事项,需要的朋友参考一下 ThreadLocalMapThreadLocalThreadLocalThreadLocalMapset()get()remove()ThreadLocalremove()`方法 弱引用介绍: 如果一个对象只具有弱引用,那就类似于可有可无
本文向大家介绍解决Tensorflow 内存泄露问题,包括了解决Tensorflow 内存泄露问题的使用技巧和注意事项,需要的朋友参考一下 使用tensorflow进行编程时,经常遇到操作不当,带来的内存泄露问题,这里有一个可以帮助debug问题所在方法: https://stackoverflow.com/questions/51175837/tensorflow-runs-out-of-mem
本文向大家介绍Android中Handler引起的内存泄露问题解决办法,包括了Android中Handler引起的内存泄露问题解决办法的使用技巧和注意事项,需要的朋友参考一下 在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用。通常我们的代码会这样实现。 但是,其实上面的代码可能导致内存泄露,当你使用Android lint工具的话,会得到这样的警告 看到这里,可能
我有一个课程调度问题,带有用于分数计算的约束流。当求解分配的堆时,它会不断增加,因此在几个小时后甚至超过8GB,我得到了一个java.lang.OutOfMemoryError:java堆空间。正如optaplanner文档中所述,堆大小在求解器阶段应保持不变。我需要关于这种行为的问题以及如何调试的建议。 optaplanners toList ConstraintCollector中提供的复制器
问题 在使用海康h5player播放视频的时候,出现了内存泄露 版本2.12 链接 内存泄露监听,但是不知道怎么处理 期望 可以一直播放视频,但是不知道怎么处理监听的内存泄露(重新刷新也不行,内存依旧,不是很0开始) 代码
手动创建vue组件的方法: 手动销毁组件的方法 在组件销毁后,仍然能检测到大量的detached DOM,检测过没有全局的事件绑定,有哪位大佬遇到过类似的问题,望不吝赐教!