본문 바로가기
GpsLog Manager (자전거 기록 관리)

GpsLog Manager - 지도에 루트 출력 속도 개선

by 태디 2016. 5. 26.
728x90


테스트 표본은 2013년 미국 자전거 여행 7월 GPX 데이터 한달치 기준





개선 전 : 약 34~5초 


https://www.youtube.com/watch?v=pdsoDFJFMNs&feature=youtu.be








개선 후 : 약 5~7초


https://www.youtube.com/watch?v=PHcatfuiqFM&feature=youtu.be


※ 검색 속도는 선택한 라이딩 정보 건수에 따라 다를 수 있고 1건 같은 경우는 이전보다 약간 빠르거나 같을 수 있다. 




GPX파일을 파싱후 화면에 출력할 때는 속도가 빠르지만 DB에 등록후 불러올 경우에는 내부적으로 1~2단계의 프로세스를


더 거쳐야 했기 때문에 느려질 수 밖에 없었다. 이유는 조회하고 그 결과안에서 위경도 정보만 다시 뽑아내야 하는 파싱


작업 때문이다.





-프로그래밍적 내용-


C#의 Generic(제너릭) 중 List 클래스가 있는데 최초 파싱할 때는 List를 사용하기 때문에 속도가 빨랐지만 DB에서 불러올

경우는 ADO.NET의 Datatable를 이용하기 때문에 데이터가 많아질 수록 느려지는 단점이 있다. 실제 구글에서 조금만 검색해도 

Datatable의 속도 이슈에 관한 글이 많다. 


단순 비교만 하자면 정확하진 않지만 해외 블로그에 나온 내용에 근거하여 약 4.3배 List<T>가 빠르다라고 나와있다.

출척 : http://lauteikkehn.blogspot.kr/2012/03/datatable-vs-list.html

DB에서 막바로 List로 바꿀수 없기에 SQL의 WHERE 조건에 IN 속성을 사용하여 여러건의 데이터를 한번에 조회한 후 ADO.net의 

DataReader을 이용하여 List에 담아서 GPX 파일을 파싱할 때와 같은 효과를 냈다.


※ 날짜가 다른 여러건의 로그 데이터를 한 레이어에 출력하게 되면 가까운 곳의 GPS 위경도 지점간에 선이 연결되서 트랙이 엉망이

된다. 그걸 방지하기 위해서는 라이딩 정보 1건 기준으로 새로운 레이어를 추가하여 로그를 출력해야 한다. 로그의 생성시간 순으로

출력하는 것도 중요하다.







댓글