我在C#中创建了一个程序,它处理了大约30个压缩文件夹,总共有35000个文件。我的目的是读取每个文件以处理其信息。截至目前,我的代码提取所有文件夹,然后读取文件。这个过程的问题是它需要大约15-20分钟,这是很多。
我使用以下代码提取文件:
void ExtractFile(string zipfile, string path)
{
ZipFile zip = ZipFile.Read(zipfile);
zip.ExtractAll(path);
}
提取部分是花费最多时间处理的部分。我需要减少这个时间。有没有办法我可以读取压缩文件夹内的文件内容而不提取它们?或者,如果有人知道任何其他可以帮助我减少此代码时间的方法吗?
提前致谢
答案 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中我们将执行并行调用,操作将仅依赖于服务器权限。