c# – 并行扩展

我有一个具有大量IO操作的应用程序,例如文件复制,压缩和移动文件系统周围的文件,复制到备份服务器.

我将此程序构建为单线程.它运行2分钟.

我使用Parallel扩展并使用Task构建了该程序的另一个版本,它几乎在2分钟内运行.

换句话说,由于IO很大,我没有看到使用Parallels带来的性能提升.

如果我将应用程序部署到刀片服务器,我会得到相同的结果吗?

刀片服务器是否比我的工作站更快/更多地处理IO?

将Parallels与IO绑定应用程序一起使用没有任何好处吗?

如果您所做的只是在系统中复制或移动文件,那么TPL提供的并行性对您没有多大帮助.例如,移动实际上不使用任何CPU,它只是更改磁盘目录记录结构中的文件位置.

文件压缩是一个不同的故事.在这里,您将加载数据并使用CPU进行压缩,然后将其保存到磁盘.您可以使用pipelineparallel loop以更有效的方式加载/压缩/保存数据.而不是让一个线程工作压缩每个文件,你可以有多个线程处理不同的文件.

以下代码按顺序压缩文件加载,然后并行压缩.我在i7 920和intel X25 SSD上得到以下时间,压缩329张JPG图像,总计800Mb的数据.

顺序:39901ms

平行:12404ms

class Program
{
    static void Main(string[] args)
    {
        string[] paths = Directory.GetFiles(@"C:\temp", "*.jpg");

        DirectoryInfo di = new DirectoryInfo(@"C:\temp");

        Stopwatch sw = new Stopwatch();
        sw.Start();
        foreach (FileInfo fi in di.GetFiles("*.jpg"))
        {
            Compress(fi);
        }
        sw.Stop();
        Console.WriteLine("Sequential: " + sw.ElapsedMilliseconds);

        Console.WriteLine("Delete the results files and then rerun...");
        Console.ReadKey();

        sw.Reset();
        sw.Start();
        Parallel.ForEach(di.GetFiles("*.jpg"), (fi) => { Compress(fi); });
        sw.Stop();

        Console.WriteLine("Parallel: " + sw.ElapsedMilliseconds);
        Console.ReadKey();
    }

    public static void Compress(FileInfo fi)
    {
        using (FileStream inFile = fi.OpenRead())
        {
            if ((File.GetAttributes(fi.FullName)
                & FileAttributes.Hidden)
                != FileAttributes.Hidden & fi.Extension != ".gz")
            {
                using (FileStream outFile =
                            File.Create(fi.FullName + ".gz"))
                {
                    using (GZipStream Compress =
                        new GZipStream(outFile,
                        CompressionMode.Compress))
                    {
                        inFile.CopyTo(Compress);
                    }
                }
            }
        }
    }
}

有关压缩代码,请参阅How to: Compress Files

相关文章
相关标签/搜索