gpt4 book ai didi

c# - 多页TIFF的分离性能

转载 作者:行者123 更新时间:2023-11-30 16:52:57 25 4
gpt4 key购买 nike

我需要分离多页 TIFF 文件。输入文件夹包含 100 个 TIFF 文件。 100 个 TIFF 文件花费的时间是 1.40 分钟。每个 TIFF 文件包含两页。有没有办法提高性能,有没有办法加快这个过程?

               static void Main(string[] args)
{
string input = @"D:\testSplit\input\";
string output = @"D:\testSplit\output\out";
DirectoryInfo dir1 = new DirectoryInfo(input);
FileInfo[] DispatchFiles = dir1.GetFiles();
if (DispatchFiles.Length > 0)
{
foreach (FileInfo aFile in DispatchFiles)
{
string files = input + aFile.Name;

if (File.Exists(files))
{
Split(files, output);
}

}
}
}


public static List<string> Split(string InputFilePath, string OutputPath)
{
List<string> splitFileNames = new List<string>();
try
{
//Get the frame dimension list from the image of the file and
Image tiffImage = Image.FromFile(InputFilePath);
//get the globally unique identifier (GUID)
Guid objGuid = tiffImage.FrameDimensionsList[0];
//create the frame dimension
FrameDimension dimension = new FrameDimension(objGuid);
//Gets the total number of frames in the .tiff file
int noOfPages = tiffImage.GetFrameCount(dimension);
if (noOfPages == 1)
{
splitFileNames.Add(InputFilePath);
tiffImage.Dispose();
return splitFileNames;
}
string filName = Path.GetFileNameWithoutExtension(InputFilePath);
string fileExtention = Path.GetExtension(InputFilePath);

ImageCodecInfo encodeInfo = null;
ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders();
for (int j = 0; j < imageEncoders.Length; j++)
{
if (imageEncoders[j].MimeType == "image/tiff")
{
encodeInfo = imageEncoders[j];
break;
}

// Save the tiff file in the output directory.
if (!Directory.Exists(OutputPath))
Directory.CreateDirectory(OutputPath);
foreach (Guid guid in tiffImage.FrameDimensionsList)
{
for (int index = 0; index < noOfPages; index++)
{
FrameDimension currentFrame = new FrameDimension(guid);

tiffImage.SelectActiveFrame(currentFrame, index);

string outPath = string.Concat(OutputPath, filName, "-P", index + 1, fileExtention);

tiffImage.Save(outPath, encodeInfo, null);

splitFileNames.Add(outPath);
}
}

tiffImage.Dispose();
return splitFileNames;

}
catch (Exception ex)
{
return splitFileNames;
}
}

最佳答案

A parallel foreach loop 可以让你到达你需要去的地方。

FileInfo[] DispatchFiles = dir1.GetFiles();
Parallel.ForEach(DispatchFiles, aFile =>
{
string files = input + aFile.Name;
if (File.Exists(files))
{
Split(files, output);
}
}

使用并行处理,您可能会遇到一些共享资源问题,但如果每个处理都完全独立于彼此,它应该会提高您的性能。

如果您需要限制循环创建的线程数,请查看 MaxDegreeOfParallelism属性(property)。

关于c# - 多页TIFF的分离性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31946540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com