Код: Выделить всё
allFiles = await readAllFilesAtRootFolder("H:/Sorted images/2010", extensions, chkSubFolders.Checked, cancellationToken);
Код: Выделить всё
readAllEXIFdates(fileQueue, allFiles, _cancellationTokenSource.Token);
Моя проблема заключается в том, что функция readAllEXIFdates иногда занимает минуты, а иногда и секунды при первом запуске.
Я тестировал это по тому же пути впервые с момента загрузки приложения, чтобы избежать какого-либо влияния со стороны ОС, кэширующей файлы, если это произойдет.
Это функция. р>
Код: Выделить всё
public static void readAllEXIFdates(ConcurrentQueue fileQueue, ConcurrentDictionary EXIF_Dictionary, CancellationToken cancellationToken)
{
mediaFile[] files = fileQueue.ToArray();
foreach (var key in EXIF_Dictionary.Keys)
{
mediaFile mFile = new mediaFile();
//foreach (var file in EXIF_Dictionary[key])
if (EXIF_Dictionary.TryGetValue(key, out var mediaFilesList))
{
if (cancellationToken.IsCancellationRequested)
break;
{
for (int i = 0; i < mediaFilesList.Count; i++)
{
mFile = getImageExifDate(mediaFilesList[i].fileName);
mediaFilesList[i].exif_date = mFile.exif_date;
mediaFilesList[i].fileSize = mFile.fileSize;
fileQueue.Enqueue(mediaFilesList[i]);
}
}
}
}
}
public static mediaFile getImageExifDate(string fileName)
{
mediaFile mFile = new mediaFile();
long fSize = 0;
try
{
mFile.fileName = fileName;
var metaData = ImageMetadataReader.ReadMetadata(fileName);
var exifDirectory = metaData.OfType().FirstOrDefault();
fSize = new System.IO.FileInfo(fileName).Length;
if (exifDirectory != null && exifDirectory.TryGetDateTime(ExifDirectoryBase.TagDateTimeOriginal, out DateTime dateTimeOriginal))
{
DateTime exifdate = dateTimeOriginal;
mFile.exif_date = exifdate.ToString();
//return exifdate.ToString();
}
else
{
DateTime modification = System.IO.File.GetLastWriteTime(fileName); // Last time file modified.
mFile.exif_date = modification.ToString();
//return modification.ToString();
}
}
catch
{
DateTime modification = System.IO.File.GetLastWriteTime(fileName); // Last time file modified.
mFile.exif_date = modification.ToString();
}
long k = fSize;
mFile.fileSize = string.Format("{0:N2} MB", (Double)fSize / (1024.0 * 1024.0));
return mFile;
}
Какой совет?
Подробнее здесь: https://stackoverflow.com/questions/793 ... -operation
Мобильная версия