簡體   English   中英

C#中的循環優化

[英]loop optimization in c#

我正在使用 c# 為 pc 開發音樂播放器,一切似乎都很好,但是,我在從音樂目錄加載所有音樂文件時遇到問題,因為它加載速度非常慢,這在打開應用程序時需要時間,可能需要 5 min 取決於音樂文件的數量。 我認為發生這種情況是因為我創建了一個循環來循環遍歷每個音樂文件並獲取元數據以及圖片以加載到每個音樂文件的不同圖片框上。
請幫助,我需要它更快。 謝謝你。 代碼在下面...

    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;

    }

您可以嘗試使用后台線程將循環替換為並行 foreach 循環 - 在處理時將每個項目添加到 UI,並讓 .Net 確定處理所有內容的最有效方式。 如果你做對了,你的 UI 將保持響應,你的用戶將開始“足夠看......”這是一個讓你開始的鏈接:

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

但是,如果您有大量音樂文件,您可能不想一次將它們全部加載到內存中。 我會研究某種允許虛擬化的列表控件或布局控件,以便您在任何給定時間僅實例化和顯示可見的控件。 使用教程了解如何綁定到您的集合以使其虛擬化。

如果您發布一個更具體的問題以及您嘗試過的示例,您將獲得更具體的答案...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM