2017-04-19 3 views
0

자주 필요하기 때문에 SQLite.Net Async 라이브러리를 사용하여 SQLite db의 엔터티를 캐싱하고 있습니다. 엔티티를 표시하기 위해로드 바인딩을 사용하는 특정 페이지 (아래에 설명 됨)로 이동하면 '무한'GC 루프가 발생합니다.Xamarin Forms 안드로이드 GC 루프

NurseryFull

나는

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

를 사용하고 엔티티를 캐시 내가 부하와

Parallel.ForEach() 

을 사용하여이 후

ConcurrentDictionary<Type, IEnumerable<IEntity>> 

에 저장하려면 의 반영 및 재귀 각각의 엔티티를 매핑합니다. 이 프로세스는 다소 빠른 것 같습니다 ...

번거로운 페이지로 이동하면 캐시 된 엔터티를 검색하여 ListView에 표시합니다. 엔터티를 탭하면 엔터티에 대한 정보가 바인딩을 통해 화면에 표시되어야합니다. 사용자가 화면을 탭하면 루프가 시작됩니다.

식료품 점에서 돌아온 후에도 아직 완료되지 않았 음을 알 수 있습니다. NurseryFull

는 내가 더 이상 유형을 모르는 어느 HAXM, 2GBRAM, 256Heap 크기와 갤럭시 탭으로 실행하는 에뮬레이터에서이 테스트 한 두 태블릿 전에 이상의 개체를 처리 할 수있는 입력해도 같은 문제를 (필요 루프가 시작됩니다).

정보가 충분하지 않아서 더 많은 정보를 제공하지만 어디에서 볼지 또는 무엇이 문제를 일으킬 수 있는지 알 수 없습니다.

도움을 주시면 대단히 감사하겠습니다.

너,

+0

문제를 재현 할 수있는 기본적인 데모를 알려주십시오. –

+0

오늘 그 일을 할 것입니다! –

답변

0

나는 결국이 문제를 발견했다. 처음에는 엔티티의 양이 X에 도달했을 때만 문제가 발생했기 때문에 캐싱하는 엔티티의 양과 관련이 있다고 생각했습니다. XAML 조각을 조각별로 주석 처리하여 페이지가 왜 까다로운 지 테스트 한 이유는 무엇입니까? 진짜 문제.

나는 무엇이 일어 났는지 보여주기 위해 GIST을 만들었습니다.

TLDR;
여러 개의 유효성 검사 동작을 실행하고 서로 충돌합니다.