サイズが 50GB 以上の Json ファイルがあります。以下は、Json の非常に小さなチャンクを読み取るために私が書いたものです。大きなファイルを読み取るには、これを変更する必要があります。
internal static IEnumerable<T> ReadJson<T>(string filePath)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
using (StreamReader sr = new StreamReader(filePath))
{
String line;
// Read and display lines from the file until the end of
// the file is reached.
while ((line = sr.ReadLine()) != null)
{
byte[] jsonBytes = Encoding.UTF8.GetBytes(line);
XmlDictionaryReader jsonReader = JsonReaderWriterFactory.CreateJsonReader(jsonBytes, XmlDictionaryReaderQuotas.Max);
var myPerson = ser.ReadObject(jsonReader);
jsonReader.Close();
yield return (T)myPerson;
}
}
}
- 現在のコードで StreamReader を構築するときにバッファ サイズを指定すれば十分でしょうか?
- ここで間違っている場合は修正してください..バッファサイズは、基本的に、一度にディスクからメモリに読み込まれるデータの量を指定します。したがって、ファイルのサイズが 100MB で、バッファー サイズが 5MB の場合、ファイル全体が読み取られるまで、一度に 5MB がメモリに読み取られます。
- ポイント 3 の私の理解が正しいと仮定すると、このような大きなテキスト ファイルの場合、理想的なバッファー サイズはどれくらいになるでしょうか? int.Max サイズは悪い考えでしょうか? 64 ビット PC では、int.Max サイズは 2147483647 です。バッファ サイズはバイト単位で、約 2GB に評価されると思います。これ自体に時間がかかる可能性があります。バッファサイズとして100MB〜300MBのようなものを見ていました。