2013-05-13 29 views
0

我有一个列表Songs。我需要将此列表存储在以后加载,但由于没有内置唯一ID,因此我只使用存储轨道标题和艺术家的KeyValuePair。这应该是独一无二的,但是这种方法仅需要50秒就可以在我的PC上播放1800首歌曲。 (我已经更新的代码。MediaLibrary只是可运行的代码。序列化歌类

List<KeyValuePair<string,string>> kv = new List<KeyValuePair<string,string>>(); 

List<Song> chosenSongs = new List<Song>(); 
//...code to add to chosenSongs 

var songs = chosenSongs; 
// var songs = new MediaLibrary().Songs; 

for(int i = 0; i < songs.Count; i++) 
{ 
    kv.Add(new KeyValuePair<string, string>(songs[i].Name, songs[i].Artist.ToString())); 
} 

这是太慢,而且也没有系列化还正在做。有没有序列化Song类型对象的更好的办法?

+3

为什么你需要序列化歌曲?你确定它会加入到需要时间的列表中,我期望它是对'MediaLibrary()。Songs'的调用,特别是如果有很多。 – 2013-05-13 14:19:02

+0

你确定在将'KeyValuePair'添加到'List'时导致了糟糕的性能吗? – Fendy 2013-05-13 14:20:08

+0

如果需要50秒才能做到这一点;这很可能是因为应用程序正在从磁盘读取该信息。在内存中创建1800 KVP的列表将不会花费50秒。 – 2013-05-13 14:20:41

回答

1

在你的代码中,你得到了Song的各种属性,我相当确定这会导致在PC上读取一个磁盘(最好的情况是,你可能已经选择了一个网络媒体库),当你的时候基本上会变得很慢已经有成千上万的人通过了。

最好的办法是尝试构建用户界面,以便工作是展开,即当用户选择它/当你需要显示它时加载每首歌曲的信息。