2017-04-19 10 views
0

頻繁に必要となるため、SQLite.Net Asyncライブラリを使用してSQLite dbのエンティティをキャッシュします。エンティティを表示するためにバインディングの負荷を使用する特定のページ(後述)に移動すると、「無限の」GCループが発生します。Xamarin Forms Android GCループ

NurseryFull

私は

SQLiteAsyncConnection.Table<T>().ToListAsync() 

を使用していたエンティティをキャッシュし、私は負荷に

Parallel.ForEach() 

を使用して、この後

ConcurrentDictionary<Type, IEnumerable<IEntity>> 

に保存するにはのリフレクションと再帰を使用して各エンティティをマッピングします。このプロセスはむしろ高速です...

問題のあるページに移動すると、キャッシュされたエンティティが取得され、ListViewに表示されます。エンティティがタップされると、そのエンティティに関する情報がバインディングを介して画面に表示されます。ユーザーが画面をタップすると、ループが始まります。

食料品店から帰った後、私はそれがまだ行われていないことがわかります。 NurseryFull

私はもうタイプを知らないうち256Heapサイズとギャラクシータブは、タブレットが以前より多くのエンティティを扱うことができaltough(同じ問題を抱えて両方、HAXM​​、2GBRAMで実行しているエミュレータ上でこれをテストしてみましたループが始まります)。

これはおそらく十分な情報ではないと私はもっと多くを提供するだろうが、私はちょうどどこを見て何が原因かもしれないか分からない。

ご協力いただきありがとうございます。

あなた、

+0

問題を再現できるデモンストレーションを共有してください。 –

+0

私は今日それについて作業します! –

答えて

0

私はついにこの問題を発見しました。最初は、エンティティの量がXに達したときに問題が発生したため、キャッシングしていたエンティティの量と関係があると思っていました。なぜXAMLを厄介なものにしたのかをテストするために、本当の問題。

私は何が起こったかを示すGISTを作成しました。

TLDR;
複数の検証ビヘイビアを実行していて、互いに競合していました。