2017-04-19 68 views
0

我通過使用SQLite.Net異步庫從SQLite數據庫緩存實體,因爲它們是經常需要的。當我導航到一個使用大量綁定來顯示實體的特定頁面(下面解釋)時,發生了一個'無限'GC循環。Xamarin形式Android GC循環

NurseryFull

要緩存我使用

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

實體和他們在一個

ConcurrentDictionary<Type, IEnumerable<IEntity>> 

存儲在此之後我用

Parallel.ForEach() 

與負載的反射和遞歸來映射每個實體。這個過程似乎是相當快...

當我導航到麻煩的頁面時,它檢索緩存的實體,並將它們顯示在ListView中。當一個實體被輕敲時,關於實體的信息應該通過綁定顯示在屏幕上。當用戶點擊屏幕時,循環開始。

從雜貨店回來後,我看到它還沒有完成。 NurseryFull

我與HAXM,2GBRAM,256Heap大小和Galaxy Tab的運行模擬器,而我不知道是什麼類型測試了這兩個有同樣的問題(altough平板之前可以處理更多的實體循環開始)。

我知道這可能是不夠的信息,我會提供更多,但我只是不知道在哪裏看或可能導致此。

任何幫助,非常感謝!

你的,

+0

請你分享一個可以重現問題的基本演示嗎? –

+0

今天我會努力工作! –

回答

0

我終於找到了問題。起初,我認爲它與我正在緩存的實體數量有關,因爲當實體數量達到X時才發生問題。當我一塊一塊地評論XAML以測試頁面爲何如此麻煩時,我發現真正的問題。

我創建了一個GIST來顯示發生了什麼。

TLDR;
我運行了多個驗證行爲,並且它們相互衝突。