我的主应用程序出现问题,在没有刷新的情况下使用应用程序,内存(和CPU使用率)越来越高。
我设法重现了它: https://jsfiddle.net/fmgy778r/
angular.module('TestModule', []).controller('TestController', function ($controller, $scope) {
$scope.a = [];
for (var i = 0; i < 10 * 1000 * 1000; i++)
$scope.a.push("stringstring" + i);
});
在Chrome上按 shift + ESC 。
现在按&#34; 问题&#34;,该标签的内存为1GB + - 。
按&#34; 默认&#34;并看到内存仍然是1GB。
按&#34; 问题&#34;并看到内存正在下降然后再次上升。
按&#34; 默认&#34;一次,然后按&#34; 问题&#34;以快速点击垃圾邮件的方式进行10次,看到你的内存达到1.5-2GB
我的系统中有大约30个模块,如果发生这种情况,我会明白为什么内存只是膨胀。
为什么会这样?
如何解决?
*我知道我应该使用this
而不是$scope
,但我想重现真实的代码。
答案 0 :(得分:1)
我想我现在明白你想要什么。我用你提供的和更新版本测试了它(1.4.8可用于小提琴)。
如果不进行修改,我的Chrome(64位,Linux,8GB)使用初始120MB,点击&#34;问题&#34;后,它会超过1 GB并停留在那里。
但是如果你添加
$scope.$on('$destroy', function() {
$scope.a = [];
});
进入你的第一个控制器,内存将恢复原状。请注意,这不是立竿见影的,但是在下一次运行垃圾收集器之后(在我的机器上,这发生在大约5 - 15秒之后)。 GC运行后,内存恢复到初始值。有很多&#34;问题的事件&#34;点击,记忆保持不变,因为&#34; $ destroy&#34;触发事件并重置变量并为GC做好准备。