我有大约 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 上找到了这个,而且大多数答案都有些不完整。我也读过 Sasha Goldstein 的 .NET 性能书籍,但他关于磁盘 IO 的部分有点薄。
任何建议将不胜感激。