我有一個大小爲50GB及以上的Json文件。 以下是我寫的閱讀Json的一小部分內容。我現在需要修改它來讀取大文件。在C#中高效地讀取極大文件。目前使用StreamReader
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這樣的緩衝區大小。
增加緩衝區的大小,甚至低至128K不太可能有很多好處。 1MB緩衝區已經比它需要的大。然而,確保唯一的方法是使用不同的緩衝區大小。 –
50GB文件?如果是信用卡一覽表可我有一個副本,請(JK) –