【发布时间】:2015-06-04 00:47:45
【问题描述】:
我们有大量的日志(117 条日志,总共大约 17gb 的数据)。它是纯文本,所以我知道它会很好地压缩。我不是在寻找出色的压缩或速度(但这将是一个很好的奖励)。我目前所做的是获取要读取的日志文件列表(它们在文件名中有一个日期戳,所以我首先过滤)。获得列表后,我使用File.ReadAllLines() 读取每个文件,但我们也对其进行过滤......
private void GetBulkUpdateItems(List<string> allLines, Regex updatedRowsRegEx)
{
foreach (var file in this)
allLines.AddRange(File.ReadAllLines(file).Where(x => updatedRowsRegEx.IsMatch(x)));
allLines.Sort();
}
从网络读取 5 个文件大约需要 22 秒。我想做的是将文件列表压缩成一个 zip 文件。将 zip 文件复制到本地,然后解压缩并完成剩下的工作。问题是我不知道如何开始。由于我使用的是 .net 4.5,我首先尝试了System.IO.Compression.ZipFile,但它需要一个目录,我不想要所有 117 个文件。我看到有人使用网络流和 7zip,这听起来很有希望,而且我相当肯定 7zip 安装在我需要来自的日志的服务器上(可能不重要,因为我们使用 UNC 路径)。所以我被困住了。有什么建议吗?
【问题讨论】:
-
你可以试试 ZipFileExtensions.CreateEntryFromFile。此处提供详细信息msdn.microsoft.com/en-us/library/hh485724%28v=vs.110%29.aspx
-
@PraveenPaulose 我给了你的建议。对于 17 meg 的日志文件,它似乎可以正常工作,但后来我在我拥有的最大文件(670mb)上尝试了它,并通过内存不足异常进行了尝试。讨论了一些,我认为我们要做的是使用已经在同一台服务器上运行的不同程序压缩日志。然后这个程序可以只复制压缩文件并从他们那里做它需要做的事情。
-
如果这是一个选项,您不妨这样做。将节省编码时间和精力:)
标签: c# performance compression