我有一个相当简单的任务——我需要从一组图像中提取创建日期、最后修改日期和拍照日期,并将它们写入文本文件。对于拍照日期,我使用的是metadata-extractor。
这是一些示例代码,
List<FileInfo> fileList = Utils.FileList(targetPath, true);
foreach (FileInfo fi in fileList)
{
string dateTime = "";
try
{
var metadatadir = ImageMetadataReader.ReadMetadata(fi.FullName);
var subIfdDirectory = metadatadir.OfType<ExifSubIfdDirectory>().FirstOrDefault();
dateTime = subIfdDirectory?.GetDescription(ExifDirectoryBase.TagDateTimeOriginal);
}
catch (Exception e)
{
Console.WriteLine(e);
}
DateTime creationDate = File.GetCreationTime(fi.FullName);
DateTime modifiedDate = File.GetLastWriteTime(fi.FullName);
string outputLine = "Filename " + fi.Name + "\t Creation Time: " + creationDate +
"\t Modified Time: " + modifiedDate + "\t" + "Exif Time: " + dateTime + "\n";
File.AppendAllText(targetFile, outputLine);
fileCount++;
}
我在这个块周围包裹了一个Stopwatch
对象来测量性能,这就是我得到的结果,
在 440218 毫秒内处理了 2244 个文件。
如果我注释掉try-catch
我得到的 Exif 代码(块),
在 116928 毫秒内处理了 2244 个文件。
我是否错误地使用了图书馆?有没有更快的方法来提取数据?
编辑根据反馈我已切换到使用StreamWriter
如下,
using (StreamWriter tFile = File.AppendText(targetFile))
{
// Code
tFile.WriteLine(outputLine);
}
基于这个最新的变化,使用 Exif 代码所花费的时间减少了一半,
在 212278 毫秒内处理了 2244 个文件。