2012-08-13 4 views
2

우리는 주로 WPF Bing Maps 컨트롤을 사용하여 WPF 애플리케이션을 개발 중입니다.WPF Bing Maps Control (IE) 캐싱

우리는 런타임에 켜거나 끌 수있는 여러 개의 타일 레이어가 있습니다. 타일 ​​레이어는 사용자 정의 타일 소스를 사용하여 데이터를 검색하므로 반환 된 URI를보다 잘 제어 할 수 있습니다.

응용 프로그램이 시작될 때 여러 개의 타일 레이어가 표시되면 우리의 restservices를 호출하여 타일을 검색합니다. 서비스는 DB에 이미지가 있는지 확인하고 이미지가 있으면 반환하고 그렇지 않으면 이미지를 생성하여 저장하고 반환합니다. 지금까지 그것은 매력처럼 작동합니다.

다음 두 가지 경우가 있습니다 : DB는 어떤 이유로 든 지워집니다 -> 서비스는 호출이있을 때 이미지를 다시 생성하고 반환합니다. 여기에 문제 없습니다.

누군가가 IE 캐시 (클라이언트 측)를 지우고 응용 프로그램이 실행 중일 때지도를 확대/축소합니다. 전에로드 된 타일은 사라지고 다시 돌아 오지 않습니다. 추가로 확대하면 이전에로드되지 않은 타일을 검색하지만 타일 레이어에 큰 간격을 남깁니다.

이 문제를 해결하는 유일한 방법은 응용 프로그램을 닫고 IE 캐시를 지우고 DB를 지우고 다시 시작하는 것 같습니다. 이 문제의 원인은 무엇입니까? 그리고 왜 겉으로는 비어있는 이미지가로드됩니까?

옵션을 파기 한 후에는 uri에 눈금 매개 변수를 지정하면 항상 새 타일을 검색합니다. 그러나 이것은 중요한 성능 패널티입니다.

이 문제를 해결하는 방법에 대한 조언이 있으십니까? 사전에

감사합니다.

+0

이 문제를 해결하는 방법을 모르겠으나 [대체 제어] (http://wpfmapcontrol.codeplex.com/)를 참고하십시오. Bing Maps WPF 컨트롤과 비슷한 API를 가지고 있지만 로컬 맵 타일 캐싱을 완벽하게 제어 할 수 있습니다. 타일 ​​URI를 생성하는 표준 TileSource 클래스 외에도 특정 줌 레벨에 대한 ImageSource를 직접 생성하는 특수 TileSource 클래스와 x 및 y 타일 인덱스를 제공합니다. – Clemens

답변

0

WPF의 타일 레이어는 타일을 캐시하고 이미로드 한 경우 캐시에서 타일을 가져옵니다. 캐시가 지워지면 해당 타일은 다시로드되지 않습니다. 이는 성능을 고려한 설계입니다. 특히 가능한 모든 타일을 가지고 있지 않은 타일 레이어의 경우. 이 문제를 해결할 방법이 없습니다.