約 2600 個の大規模な xml ファイル (解凍するとそれぞれ ~ 1 GB) があり、現在かなり密集して gzip 圧縮され、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 performance book も読みましたが、ディスク IO に関する彼のセクションは少し薄いです。
どんな提案でも大歓迎です。