2009-04-06 2 views
2

내 WPF 프로젝트는 iTunes API를 사용합니다. 시작 시점에 iTunes 라이브러리를 API에서 메모리로로드하는 몇 가지 백그라운드 스레드가 있습니다 (앱 실행 후 성능상의 이유로).매우 느린 API를로드하거나 캐시하는 가장 빠른 방법은 무엇입니까?

그러나 라이브러리를로드하는 것은 매우 느립니다. 거의 3 분 정도.

최근에 라이브러리를 DataSet에 저장해 봤지만로드 시간이 더 빨라졌으며 앱이 실행되면 백그라운드에서 DataSet을 업데이트 할 수있었습니다.하지만 실제로는 작동하지 않았습니다. DataSet을 제대로 저장하지 않습니다.

로컬 MDF 데이터베이스를 사용해 보았지만 그 중 하나를 기억할 수없는 이유로 잘못되었습니다.

주된 포인트는 iTunesLib.IITTrack COM 개체를 저장해야한다는 것입니다.

제 질문은이 라이브러리를 더 빨리로드 할 수있는 방법에 대한 아이디어가 있습니까? 나는 아이디어가 부족하다.

답변

1

그러나 라이브러리로드는 아프게 느립니다. 거의 3 분 정도.

뭔가 정상 위의 방법, 난 당신이 코드를 프로파일 링하고 문제를 발견 제안, 그 로딩 시간에 문제가 있습니다, 하나는 코드에서 또는 iTunes API의 버그입니다.

아이튠즈 API에 대해서는 잘 모르겠지만 COM API는 로딩 스레드 Tread.ApartmentState을 STA로 설정하려고 시도합니다. iTunes API가 MTA 스레드 (기본적으로 .net 스레드)를 사용하지 않는 경우,

+0

난과 같이 STA로 전환 : \t \t \t \t this.Dispatcher.Thread.SetApartmentState (ApartmentState.STA); 아무 것도 바뀌지 않는 것 같습니다. 나는 그것이 내 코드라고 상상할 수 없다. 기본적으로 Song 객체를 생성하고 그것을 콜렉션에 추가하는 for 루프이다. 지방을 다듬을 수 있는지 알아봐야 겠어. –

+0

ApartmentState를 실행 한 후에는 스레드를 작성하기 전에 설정할 수 없습니다 (직접 트레드를 작성하는 경우, 그렇지 않은 경우에는로드 스레드를 직접 작성하십시오. 변경). –

+0

COM 개체가 STA 스레드에서 실행되지 않는 이상한 문제가 많이 발생 했으므로 이것이 가장 좋은 방법입니다. –

0

iTunes COM 인터페이스에서로드하는 것이 느린 과정이었습니다. 나는 아이튠즈 자체가 병목이었고 할 수있는 일이별로 없다는 것을 발견했다.

관련 문제