2016-11-25 6 views
2

私は、SignalRを使用してプッシュされる多数のサーバーイベントを購読するNg2アプリを持っています。 アプリケーションは常に実行する必要があります。長時間の定期購読でAngular2メモリリークが発生する

Ng2エミッタを使用してイベントを待ち受けています。これらのイベントをリッスンし、そのデータをユーザーに表示するページは1つだけです。

私が抱えている問題は、翌日夜間にアプリケーションを実行したままにしておくと、Chromeのメモリ不足メッセージが表示されていることです。

定期的に実行する必要があるため、サブスクリプションを破棄することはできません。これらのサブスクリプションを管理する最良の方法は何ですか?

enter image description here

私のサブスクリプションは、コンポーネントのコンストラクタで設定されています。私は

this.proxy.on('getFundReturns', (data: any) => { 
    var obj = JSON.parse(data); 
    //console.log("getFundReturns:"); 
    //console.log(obj); 
    this.onGetFundReturnsDataRecieved.emit(obj); 
}); 
+0

再現せず、特に、コードを見ることなく伝えるのは難しいです。 –

+0

私はいくつかのコードスニペットを追加しました。他にどんな部分が役に立つでしょうか? –

+0

ブラウザのdevtoolsプロファイラを使ってメモリを正確に調べる方法を調べましたか? –

答えて

0

私のコードを分解して調査した結果、私は問題がによって引き起こされたことが判明...

this._ytdReturnsService.getDataForGrid().subscribe((data: any) => { 
      this.lastUpdateTime = new Date(); 
      this.rows = data.rows; 
      this.cols = data.cols; 
     }); 

私のサービスは、このようなデータを発する...このように私のコンポーネントに加入していますPrimeNGという名前で使用していたサードパーティのコンポーネントです。 この問題を修正するのでメーカーが持っている...

https://github.com/primefaces/primeng/issues/488

関連する問題