배경
다양한 질의를 통해, 가장 빠른 응답시간을 보이는 방법을 알아본다.
테스트 환경
Galaxy S9, 이미지 80507개, 동영상 29개
쿼리 타입
1번타입 – 파일 콘텐츠 Uri + 이미지 타입만 거르기
contentResolver.query( MediaStore.Files.getContentUri("external"), null, MediaStore.Files.FileColumns.MEDIA_TYPE + " = ?", arrayOf("${MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE}"), null)
2번타입 – 이미지 콘텐츠 Uri
contentResolver.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null )
3번타입 – 파일 콘텐츠 Uri + 이미지 or 비디오 타입 거르기
contentResolver.query( MediaStore.Files.getContentUri("external"), null, MediaStore.Files.FileColumns.MEDIA_TYPE + " = ? OR "+ MediaStore.Files.FileColumns.MEDIA_TYPE + " = ?", arrayOf("${MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE}", "${MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO}"), null )
4번타입 – 이미지 콘텐츠 Uri 및 비디오 콘텐츠 Uri 머지하기
val imageCursor = contentResolver.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null ) val videoCursor = contentResolver.query( MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, null, null, null ) MergeCursor(arrayOf(imageCursor, videoCursor))
퍼포먼스 비교
1회차
1번 타입 응답 소요시간 = 235ms
2번 타입 응답 소요시간 = 212ms
3번 타입 응답 소요시간 = 221ms
4번 타입 응답 소요시간 = 212ms
100회 누적 평균
1번 타입 응답 소요시간 = 219ms
2번 타입 응답 소요시간 = 201ms
3번 타입 응답 소요시간 = 225ms
4번 타입 응답 소요시간 = 210ms
테스트하면서 느낀 점
- 질의 시마다 응답 소요시간은 약간의 차이가 있다. (오차 범위는 특정할수 없음)
- 기기에 포함된 비디오가 너무 적어 4번 타입과 다른 타입의 쿼리 시간이 차이가 크지 않았다. 이미지 와 비디오 파일이 모두 많을 경우 4번 타입의 쿼리는 가장 시간이 오래 걸릴 것으로 기대한다.
- 확실하지 않지만 1~4번 순으로 쿼리를 해서 첫번째 쿼리가 시간이 가장 크게 나온 것 같다. 최초 쿼리 이후 두번째 쿼리부터는 시간이 줄어드는 것 같다. (도대체 왜? DBMS 내부 캐싱?)
1~4번 순으로 100회 이상 루프 돌며 평균값을 내본 결과 1번 타입의 평균 소요 시간이 줄어드는 것을 확인했다.
0개의 댓글