私は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)ビューを破壊して再ロードすることなく、それを修正する方法(これは当分の間、私が頼りにしたものです)を探してください。
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
「人」という価値観は何をしていますか? – snorkpete
plunkrと同じです。 30秒ごとにそれを保存して上書きします。 UIにバインドされたpeopleオブジェクトには、{{people.name}}のようないくつかのキーがあります.2つは正確です。 – Brant
多分[this](http://stackoverflow.com/questions/38008334/angular-rxjs-when-should-i-unsubscribe-from-subscription)が役立ちます。 – Mavlarn