2017-03-29 5 views
1

私はGETリクエストで30秒ごとにサービスをポーリングし、UIに表示する必要があるシナリオを持っています。私はsetInterval w/30000msで私のGETリクエストをラップしました。私が見ていることは、ブラウザの呼び出しごとに、memが100kから200kの間を登るということです。約8MB程度でブラウザが正しくガベージコレクトされ、memは4-5MB下がります。角4 + Httpはコルドーバでガベージコレクションされていません

私の問題は、このアプリケーションでは、Cordova 6.5でラップされて、メモリがアプリケーションがクラッシュする前に約4日間登ることです。クラッシュのログには、メモリの不足に関する問題が表示されます。また、実行中のアプリケーションをxCodeで調べたところ、決して収集されなかったブラウザで見たのと同じメモリ上昇を確認しました。 Observableのガベージコレクションには、setInterval呼び出し内でインスタンス化されている問題があると思います。

私はメモリ上昇を示すplunkrを作成しました。 1)なぜこれが起こっているのか、2)ビューを破壊して再ロードすることなく、それを修正する方法(これは当分の間、私が頼りにしたものです)を探してください。

Plunkr

setInterval(() => { 
    this.http.get('./people.json') 
    .subscribe((response) => { 
     this.people = response; 
    }, (err) => { 
     //console.log('Error'); 
    }); 
}, 15000); 

環境: アンギュラ4.0.0/5.2.0 RxJS /角度/ HTTP 4.0.0 /コルドバ6.5/iOSの10.3

+1

「人」という価値観は何をしていますか? – snorkpete

+0

plunkrと同じです。 30秒ごとにそれを保存して上書きします。 UIにバインドされたpeopleオブジェクトには、{{people.name}}のようないくつかのキーがあります.2つは正確です。 – Brant

+0

多分[this](http://stackoverflow.com/questions/38008334/angular-rxjs-when-should-i-unsubscribe-from-subscription)が役立ちます。 – Mavlarn

答えて

0

使用.unsubscribe @。各インターバルで、新しいサブスクリプションを設定します。

+0

http observableはAngularで自動的に登録解除されます。 – Brant

関連する問題