c#

时间:2016-10-18 17:35:21

标签: c# performance optimization

我正在使用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;

    }

1 个答案:

答案 0 :(得分:0)

您可以尝试使用后台线程使用并行foreach循环替换循环 - 在处理UI时将每个项添加到UI,让.Net确定处理所有内容的最有效方法。如果你做得对,你的用户界面将保持响应,你的用户将从#34开始,足以看到......&#34;这是一个可以帮助您入门的链接:

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

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

如果您发布更具体的问题以及您尝试过的示例,您将获得更具体的答案......