Я использую следующий код для рекурсивного поиска изображений в выбранной папке. В этой папке более 120000 изображений (да, я фотограф!), И это невероятно медленно, например, Я должен остановить это через 10 минут, и это еще не сделано. Для сравнения, мой код Python (интерпретированный!) Делает то же самое менее чем за 2 минуты.
Есть ли способ сделать этот код более эффективным? Работает нормально, ничего страшного, но только очень медленно ...
public List<StorageFile> _allFiles;
public List<StorageFile> ShuffledFiles;
public int i = 0;
public int ri = 0;
public Boolean random = false;
public int numfiles = 0;
//Get the starting folder for recursive search
private static async Task<StorageFolder> SelectFolderAsync()
{
var folderPicker = new Windows.Storage.Pickers.FolderPicker
{
SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop
};
//Selects the folder with a FolderPicker and returns the selected StorageFolder
folderPicker.FileTypeFilter.Add("*");
StorageFolder folder = await folderPicker.PickSingleFolderAsync();
return folder;
}
//Get the list of files recursively
private async Task GetFilesInFolder(StorageFolder folder)
{
var items = await folder.GetItemsAsync();
foreach (var item in items)
{
//If it's a folder, read each file in it and add them to the list of files "_allFiles"
if (item is StorageFile )
{
StorageFile typetest = item as StorageFile;
String ext = typetest.FileType.ToLower();
if ((ext == ".jpg") || (ext == ".jpeg") || (ext == ".tiff") || (ext == ".cr2") || (ext == ".nef") || (ext == ".bmp") || (ext == ".png"))
{ _allFiles.Add(item as StorageFile);
numfiles = numfiles + 1;
//Display the file count so I can track where it's at...
cmdbar.Content = "Number of slides:"+numfiles.ToString();
}
}
else
//otherwise, recursively search the folder
await GetFilesInFolder(item as StorageFolder);
}
}
//Select the directory, load the files and display the first file
private async void LoadMediaFile(object sender, TappedRoutedEventArgs e)
{
StorageFolder root = await SelectFolderAsync();
//Initialises the file list _allFiles, the filecount numfiles, and the pointers to the list i and ri
_allFiles = new List<StorageFile>();
numfiles = 0;
//Reads the files recursively into the list
await GetFilesInFolder(root);
}