【问题标题】:Nativescript Vue v-if memory leakNativescript Vue v-if 内存泄漏
【发布时间】:2019-10-01 23:26:15
【问题描述】:

问题

https://github.com/nativescript-vue/nativescript-vue/issues/492

简介

在 Nativescript-Vue 中使用自定义选项卡路由策略,我发现我的应用程序正在泄漏内存。路由策略依赖于一个总体组件,该组件将通过 v-if 语句切换活动组件。当用户导航到新页面时,v-if 语句将隐藏(并销毁)旧页面并显示(并挂载)新页面。理论上应该是旧页被销毁,内存被垃圾回收器回收;然而,实际上内存会堆积起来,似乎永远不会从应用程序中释放出来,即使手动调用垃圾收集器也是如此。

测试和复制

这个问题是在一个真正的 ios 设备上测试和发现的(模拟器似乎没有内存问题,但我读到它不像一个真正的设备)。上面提供的 github 问题可以提供更多详细信息,下面链接的存储库演示了导致内存泄漏的最小复制。

可以在https://github.com/geodav-tech/nativescript-vue-memory-leak 找到此错误的重现。

在构建项目后,通过 xcode 运行它,查看内存配置文件,然后从状态列表来回导航到安装时生成的示例列表。自述文件中还提供了屏幕截图

我希望隐藏组件的内存在它们被销毁后被清理,目前即使您让应用程序打开几分钟,垃圾收集器也不会减少负载。

问题(编辑)

是否有人对应用程序持有的内存有任何理由?有没有更好的方法来完成类似这样的路由策略,不会导致内存泄漏,或者程序流的某些事情是一个糟糕的策略?

【问题讨论】:

  • 可能更合适的方式是把这个以关于原始问题的问题的形式发布,然后提交您当前帖子的内容作为答案并接受它。这将避免让这个“问题”处于开放状态,将其保持在 SO 问题的普通格式内,并且可能会让其他人在未来更容易找到此信息。
  • 您是否尝试使用hide()destroy() 方法来避免它?更多示例可以在这里找到:vuejs.org/v2/cookbook/avoiding-memory-leaks.html
  • 我不确定我是否遵循,因为该示例中列出的销毁方法来自外部库。在我提供的复制品中应该没有什么可以破坏的。它是一个随机 id 和增量名称的数组。在销毁之前将此数组设置为 null 或空数组也不会影响内存节省。我只使用 vanilla javascript 和 nativescript-vue 创建了复制存储库。没有要调用的外部destroy()

标签: vue.js memory memory-leaks nativescript nativescript-vue


【解决方案1】:

对于任何面临与此类似的内存泄漏问题的人来说,答案在于更新。 面临这个问题的项目是针对: nativescript ios 运行时:5.0.0 nativescript 安卓运行时:5.0.0 tns 核心模块:5.0.2 nativescript-vue: 2.0.0

更新到以下内容修复了该问题。 nativescript ios 运行时:5.4.0 nativescript 安卓运行时:5.4.0 tns 核心模块:5.4.0 nativescript-vue: 2.2.2

现在,一旦导航离开,完全相同的结构就会被释放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2013-01-20
    相关资源
    最近更新 更多