[SQLite.NET] Xamarin에서 SQLite사용하기
2017. 5. 21. 03:00ㆍMobile/Xamarin
- SQLite.NET를 통해 Xamarin에서 SQLite를 손쉽게 사용할 수 있습니다. Nget Package에서 sqlite-net-pcl 모듈을 설치하면 이용하실 수 있습니다. (WPF, WinForm, ASP.NET 등은 sqlite-net를 이용하며 SQLite공식 사이트에서 Precompiled Binaries for Windows를 다운로드 하여 bin 폴더에 넣어주어야 합니다.)
- SQLiteConnection를 통해서 DB를 생성할 수 있습니다.
using (SQLiteConnection db1 = new SQLiteConnection("dbPath.s3db")) { ... }
- 비동기 기능을 활용할 수 있는 SQLiteAsyncConnection도 사용할 수 있지만 Thread 동기화에 대한 처리가 필요하며, 실수나 잘못된 Thread 동기화 처리는 Deadlock을 유발합니다. 비동기는 Task.Run()을 통해서도 구현할 수 있으므로 비동기 구현이 꼭 필요한지 고려가 필요합니다.
- 테이블 조회 방법 및 성능은 아래와 같습니다. (전체 컬럼 조회 시 Table
<T>()가 가장 빠름) //1. Table 전체 조회 (조회시간: 11264.5281) DateTime dtStart = DateTime.Now; for (int i = 0; i <= 1000; i++) { resultList = db.Table<Grades>().ToList(); } resultTime1 = (DateTime.Now - dtStart).TotalMilliseconds; //2. SQL String으로 조회 (조회시간: 4358.483) int personId = 1 string query = "SELECT * FROM Grades WHERE NotToDoItemId = " + personId.ToString(); dtStart = DateTime.Now; for (int i = 0; i <= 1000; i++) { resultList = db.Query<Grades>(query); } resultTime2 = (DateTime.Now - dtStart).TotalMilliseconds; //3. Talbe
로 조회 (조회시간: 106.2154) dtStart = DateTime.Now; for (int i = 0; i <= 1000; i++) { resultList = db.Table<Grades>().Where(t => t.PersonId == personId).ToList(); } resultTime3 = (DateTime.Now - dtStart).TotalMilliseconds; - 테이블의 일부정보만 로드 혹은 집계합수 등 (Table<T>
()는 특정 컬럼만 조회하는 것이 아니라 전체 컬럼을 로드하는 듯) 일부 컬럼만 조회할 경우 SQL String으로 실행하는 것이 가장 빠른 것으로 파악됩니다. //1. SQL String으로 집계 (조회시간: 1362.4988) DateTime dtStart = DateTime.Now; for (int i = 0; i <= 1000; i++) { result = db.Query<QueryResult>("SELECT NotToDoItemId AS Id, SUM(EvaluationResult) AS Sum FROM Grades GROUP BY NotToDoItemId"); } resultTime1 = (DateTime.Now - dtStart).TotalMilliseconds; //2. Table<T> + GroupBy 집계 (조회시간: 11790.8675) dtStart = DateTime.Now; for (int i = 0; i <= 1000; i++) { result = db.Table<Grades>().GroupBy(t => t.PersonId).Select(t => new QueryResult { Id = t.Key, Sum = t.Sum(s => s.EvaluationResult ?? 0) }).ToList(); } resultTime2 = (DateTime.Now - dtStart).TotalMilliseconds; //3. Table<T>로 전체 로드 후 GroupBy 집계 (조회시간: 12075.4998) dtStart = DateTime.Now; for (int i = 0; i <= 1000; i++) { result = db.Table<Grades>().ToList().GroupBy(t => t.PersonId).Select(t => new QueryResult { Id= t.Key, Sum = t.Sum(s => s.EvaluationResult ?? 0) }).ToList(); } resultTime3 = (DateTime.Now - dtStart).TotalMilliseconds;
'Mobile > Xamarin' 카테고리의 다른 글
[Xamarin.Android] Binding Java Library (0) | 2017.06.22 |
---|---|
[Xamarin.Forms] CustomRenderer 제작 시 참고사항 (0) | 2017.06.10 |
[Xamarin] iOS에서 TabbedPage 확장하기 (0) | 2017.05.21 |
[Xamarin] Xamarin.Forms에서 이미지 크기 (0) | 2017.05.21 |
[Android] Doze Functionality (0) | 2016.12.10 |