Memory leaks Angular.js内存泄漏与轮询数据上的ngRepeat

Memory leaks Angular.js内存泄漏与轮询数据上的ngRepeat,memory-leaks,angularjs,Memory Leaks,Angularjs,我的angular.js应用程序中出现了内存泄漏。基本上,页面由一个信息表组成,该信息表根据AJAX调用的JSON编码结果每五秒钟更新一次。我在这里创建了一个简化的JSFIDLE版本: 控制员: function HostController($scope, $timeout, Data) { $scope.encoders = Data.load(); $scope.refreshInterval = 5; $scope.reload = function () { $s

我的angular.js应用程序中出现了内存泄漏。基本上,页面由一个信息表组成,该信息表根据AJAX调用的JSON编码结果每五秒钟更新一次。我在这里创建了一个简化的JSFIDLE版本:

控制员:

function HostController($scope, $timeout, Data) {
  $scope.encoders = Data.load();
  $scope.refreshInterval = 5;

  $scope.reload = function () {
    $scope.encoders = Data.load();
  };

  $timeout(function doReload() {
    $scope.reload();
    $timeout(doReload, $scope.refreshInterval * 1000);
  }, 5000);
}
模板的一个片段:

<table class="table table-striped table-bordered" ng-controller="HostController">
  <tr>
    <th>Status</th>
  <th>...
  </tr>
  <tr ng-repeat="enc in encoders">
    <td>
      <div>{{ enc.name }}</div>
      <div ng-show="enc.version">
        v{{ enc.version.major }}.{{ enc.version.minor }}-{{ enc.version.rev }}
        <span ng-show="enc.version.user">- {{ enc.version.user }}</span>
      </div>
    </td>
  </tr>
</table>

地位
...
{{enc.name}
v{{enc.version.major}.{{enc.version.minor}}-{enc.version.rev}
-{{enc.version.user}
在Chrome中每隔一分钟左右拍摄一次堆快照时,每次内存使用量都会略有增加。我已经在本地angular.js()上应用了Igor Minar的修复程序,这很有帮助,但内存使用率仍在无情地攀升


如果有任何关于将Chrome memory profiler与angular.js结合使用的提示,我们将不胜感激。

当我轮询数据并使用ng repeat循环并呈现行时,我也遇到了同样的内存消耗问题


当我使用“item in items”时,我的内存使用量不断增加,但是当我使用“item in items track by$index”时,内存使用量是稳定的,GC被正确地清理了。

我无法在JSFIDLE中重现内存泄漏。我让应用程序运行了一段时间,我所看到的是通常的GC模式,一旦积累了足够的垃圾,就会释放内存。JSFIDLE真的会在您的机器上泄漏吗?你能提供浏览器版本信息吗?如果问题确实是可复制的,也请在提交错误。下面是一个示例。我将刷新间隔改为1秒以加快速度。在15分钟左右的时间内,会增加0.47MB。展开(数组)列表,下面的所有HTML元素(包括)都在泄漏@I你能核实一下吗?如果是这样,我将提交一个bug.nope。我不能责备你。我把超时时间改为1ms,让它在chrome canary(27.0.1415.0)和stable(24.0.1312.57)上运行一整晚,我仍然没有看到任何内存增加。这就是我测试的小提琴:如果你能以某种方式改变这个例子,使它泄漏,请打开一个错误报告。我不擅长跟踪SO更新。我有一个内存泄漏问题,这为我解决了它(使用angular v1.1.5),所以谢谢!你能找到关于为什么修复内存泄漏的更多信息吗?AngularJs 1.6.4“track by$index”中的相同问题修复了内存泄漏,但我不能使用“track by$index | filter:myfilter”(例如,过滤器),所以我设置了一个计时器,使页面每30分钟刷新一次。