基本上我有这个应用程序扫描文件夹中的所有mp3并返回没有重复的文件列表。我有两种方法来执行此任务。第一个删除重复的文件名,第二个删除具有匹配的mp3 IDv3标记的重复文件。
但是我的文件夹有大约5000个文件,它成功删除重复项到4900,但它需要永远!任何人都可以提出更有效的方法吗?我已经使用并行性来尽可能快地制作东西,但它仍然很慢。
删除重复文件名的第一种方法:
private static IEnumerable<string> GetFilesFromDir(string dir)
{
return Directory.GetFiles(dir, "*.mp3", SearchOption.AllDirectories).Distinct();
}
第二种方法遍历从上述方法返回的每个文件,并检查它的IDv3标签(艺术家 - 歌曲标题)信息,以确保不存在重复的歌曲。
private static IEnumerable<string> RemoveDuplicates(IEnumerable<string> files)
{
var dictionary = new ConcurrentDictionary<string, string>();
Parallel.ForEach(files, f =>
{
string tag = SongInformation.ArtistTitleAlbumString(f);
dictionary.TryAdd(tag, f);
});
return dictionary.Values;
}
这两种方法的调用如下:
var newFiles = RemoveDuplicates(GetFilesFromDir(Settings.SharedFolder));
答案 0 :(得分:0)
Distinct()
的电话似乎毫无意义。 Directory.GetFiles()
返回完整的文件名(带路径),因此它们始终是不同的。