2016-10-18 3 views
-6

저는 C#을 사용하는 PC 용 음악 플레이어에서 작업하고 있습니다.하지만 음악 디렉토리에서 모든 음악 파일을로드하는 데 문제가 있습니다. 아주 천천히로드하고 여는 데 시간이 걸리기 때문입니다. 응용 프로그램, 음악 파일의 양에 따라 5 분 걸릴 수 있습니다. 이것은 각 음악 파일을 반복 재생하고 메타 데이터 및 그림을 각 음악 파일의 다른 그림 상자에로드하는 루프를 만들었 기 때문에 발생한다고 생각합니다.
제발 도와주세요. 나는 더 빨리해야합니다. 고맙습니다. 코드는 다음과 같습니다 ...루프 최적화 C#

public List<MusicDetails> Music_Library() 
    { 


     List<MusicDetails> files = new List<MusicDetails>(); 
     string[] musicfolder = Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyMusic),"*mp3", SearchOption.AllDirectories); 


     for (int i = 0; i <musicfolder.Length; i++) 
     { 
      try { 
       files.Add(new MusicDetails 
       { 
        title = TagLib.File.Create(musicfolder[i]).Tag.Title, 
        genre = TagLib.File.Create(musicfolder[i]).Tag.FirstGenre, 
        artist = TagLib.File.Create(musicfolder[i]).Tag.FirstPerformer, 
        path = musicfolder[i], 
        CoverArt = OrganiseAlbums.SingleAlbumImage(musicfolder[i],true) 


       }); 
      }catch(Exception) 
      { 
       // OMIT FILE 
      } 
     } 
     return files; 

    } 
+6

어떻게 당신이 당신의 잘못된 코드를 해결하기 위해 당신을 도울 수 있다는 생각 만약 당신이 돈 이 코드를 보여주지 않습니까? – Steve

+1

그림과 메타 데이터의 스텁 정보로 백그라운드에서 async 파일을로드하십시오. 그림과 메타 데이터를 별도의 스레드에로드하십시오. –

답변

0

당신은 백그라운드 스레드를 사용하여 병렬 foreach 루프와 루프를 교체 시도해 볼 수도 있습니다 -이 처리되는대로 UI에 각 항목을 추가하고, 닷넷이 가장 효율적인 방법을 결정하자 모든 것을 처리합니다. 당신이 바로 그것을 할 경우, UI는 반응을 유지하며, 사용자가 함께 시작됩니다 "볼 정도로 ..."여기 시작하는 링크입니다 : 당신이있는 경우

https://msdn.microsoft.com/en-us/library/dd460720(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

가 톤의 음악 파일은 한 번에 모두 메모리에로드하지 않을 수도 있습니다. 필자는 가상화를 허용하는 일종의 목록 컨트롤 또는 레이아웃 컨트롤을 조사하여 특정 시점에 표시되는 인스턴스 만 인스턴스화하고 표시 할 수 있도록합니다. 자습서를 사용하여 가상화되도록 컬렉션에 바인딩하는 방법을 확인하십시오. 당신이 시도 무엇을 예제와 함께보다 구체적인 질문을 게시하는 경우, 당신은 좀 더 구체적인 답변을 얻을 것이다

...

+0

고마워, 내 코드를 붙여 넣지 않아서 미안해 .... – kingthor

+0

이것을 표시하기 위해 일종의 레이아웃 컨트롤 (예 : GridView 또는 FlowLayoutPanel 또는 기타)을 사용하고 있다고 확신합니다. 해당 레이아웃 컨트롤을 코드에서 반환하는 목록에 바인딩하거나 목록을 반복하여 각 MusicDetails 항목을 Items 컬렉션에 추가합니까? –