如何减少提取文件所需的时间?

时间:2014-01-27 17:29:46

标签: c# extract zipfile dotnetzip

我在C#中创建了一个程序,它处理了大约30个压缩文件夹,总共有35000个文件。我的目的是读取每个文件以处理其信息。截至目前,我的代码提取所有文件夹,然后读取文件。这个过程的问题是它需要大约15-20分钟,这是很多。

我使用以下代码提取文件:

void ExtractFile(string zipfile, string path)
{
    ZipFile zip = ZipFile.Read(zipfile);
    zip.ExtractAll(path);
}

提取部分是花费最多时间处理的部分。我需要减少这个时间。有没有办法我可以读取压缩文件夹内的文件内容而不提取它们?或者,如果有人知道任何其他可以帮助我减少此代码时间的方法吗?

提前致谢

3 个答案:

答案 0 :(得分:2)

也许不是将其提取到硬盘,而是应该尝试在不提取的情况下使用OpenRead进行读取,然后您必须使用ZipArchiveEntry.Open方法。< / p>

另请参阅CodeFluent Runtime工具,该工具声称可以针对性能问题进行改进。

答案 1 :(得分:2)

你可以尝试将每个条目读入内存流而不是文件系统:

ZipFile zip = ZipFile.Read(zipfile);
foreach(ZipEntry entry in zip.Entries)
{
    using(MemoryStream ms = new MemoryStream())
    {
        entry.Extract(ms);
        ms.Seek(0,SeekOrigin.Begin);
        // read from the stream
    }

}

答案 2 :(得分:0)

尝试将您的响应分解为单个等待异步方法,如果其中一个响应超过50毫秒,则逐个启动。 http://msdn.microsoft.com/en-us/library/hh191443.aspx

如果我们有10个执行逐个调用,在async / await中我们将执行并行调用,操作将仅依赖于服务器权限。