c#中的循环优化

本文关键字:优化 循环 | 更新日期: 2023-09-27 18:13:30

我正在使用c#制作pc音乐播放器,一切似乎都很好,但是,我在从音乐目录加载所有音乐文件时遇到问题,因为它加载速度很慢,打开应用程序时需要时间,可能需要5分钟,具体取决于音乐文件的数量。我认为这是因为我创建了一个循环来循环每个音乐文件,并获得元数据和图片加载到每个音乐文件的不同图片框。
请帮帮我,我需要快点。谢谢你!代码如下…

    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;
    }

c#中的循环优化

你可以尝试用使用后台线程的并行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

如果你有大量的音乐文件,你可能不想一次将它们全部加载到内存中。我会研究一些允许虚拟化的列表控件或布局控件,以便您在任何给定时间实例化并仅显示可见的控件。使用教程了解如何绑定到集合,以便对其进行虚拟化。

如果你发布一个更具体的问题,并举例说明你已经尝试了什么,你会得到更具体的答案…