[英]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 将保持响应,你的用户将开始“足够看......”这是一个让你开始的链接:
但是,如果您有大量音乐文件,您可能不想一次将它们全部加载到内存中。 我会研究某种允许虚拟化的列表控件或布局控件,以便您在任何给定时间仅实例化和显示可见的控件。 使用教程了解如何绑定到您的集合以使其虚拟化。
如果您发布一个更具体的问题以及您尝试过的示例,您将获得更具体的答案...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.