배경

다양한 질의를 통해, 가장 빠른 응답시간을 보이는 방법을 알아본다.

테스트 환경

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번 타입의 평균 소요 시간이 줄어드는 것을 확인했다.

 

Buy me a coffeeBuy me a coffee
카테고리: Android

0개의 댓글

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.