【发布时间】:2013-08-21 06:20:58
【问题描述】:
我有大约 2600 个大型 xml 文件(解压缩时每个大约 1gb),这些文件目前被非常密集地压缩并存储在我的 SSD 上。这些文件每个包含 23000 到 30000 条记录。
我需要为每条记录保留相对少量的数据,并将这些数据保存到数据库中。
我估计(通过一些基本测试)这将需要至少 150 小时来进行抓取(我假设持久性会很快,因为它的数据要少得多)。
我对 .NET 的 IO 方法以及如何提高它们的效率不是很熟悉,所以这里是我目前用来测试的方法:
public PCCompounds DoStuff(String file)
{
using(FileStream fs = this.LoadFile(file))
{
using (GZipStream gz = this.Unzip(fs))
{
using (XmlReader xml = this.OpenFile(gz))
{
return (PCCompounds)this.ParseXMLEntity(xml);
}
}
}
}
private FileStream LoadFile(String file)
{
return new FileStream(file, FileMode.Open);
}
private GZipStream Unzip(FileStream file)
{
return new GZipStream(file, CompressionMode.Decompress);
}
private XmlReader OpenFile(GZipStream file)
{
return XmlReader.Create(file);
}
private Object ParseXMLEntity(XmlReader xml)
{
XmlSerializer serializer = new XmlSerializer(typeof(PCCompounds));
return serializer.Deserialize(xml);
}
不幸的是,我只在 stackoverflow 上找到了this,而且大多数答案都有些不完整。我也看过 Sasha Goldstein 的 .NET 性能书籍,但他关于磁盘 IO 的部分有点薄。
任何建议将不胜感激。
【问题讨论】:
-
XML 的“反序列化”通常称为解析。 FWIW,我认为 1Gb/分钟的解析速度实际上是可以实现的,比这更快的任何东西都将具有挑战性。
标签: .net xml performance io deserialization