多页TIFF的分离性能

本文关键字:分离性 性能 分离 TIFF 多页 | 更新日期: 2023-09-27 18:07:23

我需要分离Multipage 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;
                }
            }

多页TIFF的分离性能

一个平行的foreach循环可以让你到达你需要的地方。

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

使用并行处理时,您可能会遇到一些共享资源问题,但是如果每个处理都是完全相互独立的,则应该可以提高性能。

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