В основном у меня есть это приложение, которое просматривает все 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));