2012-03-26 5 views
0

나는 작성하고 호스팅하는 WCF 서비스의 데이터 형식을 얻는 iPhone 응용 프로그램을 만들고 있습니다. MonoTouch를 사용하여 iPhone 클라이언트를 작성하고 있습니다. 나는 나의 스크린 중 하나에 아이템 목록 (최대 100 개 아이템)을 보여주는 테이블을 가지고있다. 각 항목에는 사용자 정의 셀에 표시 할 이미지가 있습니다. 모든 이미지를로드해야하는 것을 줄이기 위해 먼저 항목 목록을로드 한 다음 서비스를 호출하는 스레드를 실행하여 GetCell 메서드의 각 셀 이미지를 검색합니다. 이미지가 검색되면 사전에 저장하고 두 번째 서비스 호출을 저장하기 위해 셀이 렌더링 된 다음에 그 이미지를 검색합니다. 즉, 필요한 경우에만 이미지가로드되고 이후에는 사전에서 한 번로드됩니다. 다음 기사와 비슷한 코드를 사용하고 있습니다.Monotouch - 많은 WCF 서비스 호출

http://simon.nureality.ca/simon-says-monotouch-downloading-images-like-appstore-app-in-less-than-50-lines-with-coreanimation-transitions/

이 에뮬레이터에서 잘 작동하지만이 테스트 장치 (로컬 와이파이에서 아이폰 4)에 배포 할 때 나는 나를 도울 수 누군가를 바라고 있어요 몇 가지 문제가 발생합니다.

처음에 목록을로드하면 모두 정상입니다. 목록에서 오른쪽으로 스크롤하면 (손가락을 빠르게 위로 스 와이프) 장치가 상당히 심하게 흔들립니다. 서비스에 대한 호출이 스크롤을 지연시키는 것처럼 보입니다. 나는 셀에서 결과 이미지를 그리는 코드를 꺼내서 루틴에서이 값을 줄였습니다. 이것이 범인이라고 짐작했지만, 여전히 불분명합니다. ThreadPool.QueueUserWorkItem 메서드를 사용하여 내 'GetImage'메서드를 호출하고 내 사용자 지정 셀 컨트롤러에 대한 참조를 전달하므로 다른 스레드에서 호출이 전달 될 것으로 예상하므로 프로그램이 UI를 방해하지 않고 계속 수행되어야합니다. 하지만 내가 셀 컨트롤러에 대한 참조를 전달하는 것이 가상 목록이라는 문제를 일으키는 지 궁금합니다.

둘째로 목록을 위아래로 빠르게 스크롤하여 많은 수의 전화를 걸고 목록 기준을 변경하기 위해 이전 화면으로 돌아 가면 기존 통화가 끝날 때까지 기다려야하는 것처럼 보입니다. 나는 나의 기준 페이지에서 다른 것을 만들 수 있기 전에 돌아왔다. 더 이상 필요없는 화면에서 이동할 때 기존 통화를 무시할 수있는 방법이 있습니까?

미리 도움을 청하십시오.

A1.

+0

나중에 참조 할 수 있도록 위의 모든 작업을 수행하는 Miguel의 ImageLoader 클래스를 살펴 보시기 바랍니다. https://github.com/migueldeicaza/MonoTouch.Dialog/blob/master/MonoTouch.Dialog/Utilities/ImageLoader .cs – Darbio

+0

정말 어떻게 일을하는지에 따라 다릅니다. 제대로 구현되지 않으면 UITableViews 고르지 수 있습니다. 이 공간에서 함정을 최적화하고 피하는 데 대한 광범위한 프레젠테이션의 주제입니다. –

답변

1

정적 이미지 파일이 유스 케이스로 작동한다고 가정하면 모든 이미지를 웹 서버에 저장하고 URL로 직접 액세스 할 수있게 만들 것을 제안합니다. 이미지를 가져 오려면 WebClient class으로 직접 가서 모든 WCF 오버 헤드를 무시하십시오.

일반적으로 비누 기반 WCF 서비스를 만드는 대신 HTTP를 통해 직접 이동할 수있는 새로운 ASP.NET 4 Web API 프레임 워크를 사용하여 HTTP 기반 서비스를 만들 수 있습니다.

0

우리는 ashx HTTP 처리기를 사용하여 특정 URL에있는 쿼리 문자열을 기반으로 이미지를 반환하는 솔루션을 구현했습니다.

우리는 다음 캐싱을 정렬 Miguel's Image Loader을 사용하는 등

내가 상자 밖으로의 ImageLoader이 (식스 토 에즈가 언급 한 바와 같이) 더 할 수있는 WCF 호출에서 이미지를 지원하지만, 생각하지 않습니다 이미지를 SOAP 메시지가 아닌 이미지로 제공하는 것이 효율적입니다.