2

ASP.Net MVC3 プロジェクトのフロント エンドとして Angular (1.1.5) を使用していますが、ng-repeat の使用時にブラウザーでメモリ消費の問題が発生しています。

ルートが変更されて ng-view タグが更新されたときに、ng-repeat が使用されている場合、古い dom 要素はガベージ コレクションされないように見えます。

セットアップは次のとおりです。

  • _layout.cshtml <html ng-app="MyApp">、スクリプト、css、および angular アプリへのリンクを含むヘッダーを含むページ
  • レイアウト ページを使用した部分的な index.cshtml で、単一の<ng-view></ng-view>タグが含まれています。
  • ng-repeat を含む私のコンテンツを含む index.html

    index.html:

    <div ng-controller="MyCtrl">
        <div ng-repeat="item in items">
            <p>Blah Foo Bar lorem ipsum gack</p>
            <hr />
        </div>
    </div>
    
  • ルーティング構成とコントローラーを備えたメイン アプリ モジュールを含む app.js

app.js

var app = angular.module('MyApp', ['MyApp.content'])
    .config(['$routeProvider', function($routeProvider) {
        $routeProvider
            .otherwise({ templateUrl: '/index.html' });
    }]);

angular.module('MyApp.content', []);

angular.module('MyApp.content')
    .controller("MyCtrl", ['$scope', function ($scope) {
            $scope.items = [{}, {}];
        }]);

そのため、ヘッダーのリンク (特定のルートが定義されていないため、常にルート変更が発生します) を繰り返しクリックしてからガベージ コレクターを呼び出すと、chrome タイムラインで次のように表示されます。

メモリ消費

ご覧のとおり、メモリ ベースラインは初期値に戻らず、ルート変更が行われるほど増加し続けます。また、dom 要素の数も増え続けています。ヒープのスナップショットを見ると、これらは切り離されていますが、まだぶら下がっています。

ng-repeat を削除すると、dom カウントが各ルート変更をリセットします。

理由を知っている人はいますか?これらの要素がぶらぶらするのを防ぐにはどうすればよいですか?

更新: VS2010 で新しい MVC3 プロジェクトを作成しましたが、問題はありませんでした。VS2012 で新しい MVC3 プロジェクトを作成し、実行しました。:/

4

0 に答える 0