Penstriman Json.NET untuk fail JSON yang besar
Apabila berurusan dengan fail JSON yang sangat besar yang mengandungi banyak objek yang serupa, penghuraian yang cekap tanpa memori yang berlebihan adalah penting. Satu pendekatan ialah menghuraikan fail sebagai aliran, membaca dan memproses satu objek pada satu masa.
Cabaran penyahserikatan langsung
Pada mulanya, cubaan menyahsiri objek secara langsung menggunakan JsonSerializer.Deserialize<myobject>(reader)
akan gagal kerana fail JSON mengandungi senarai objek, bukan satu objek. Semasa menyahsiri objek ke dalam senarai menyelesaikan masalah, ia mengakibatkan penggunaan RAM yang berlebihan memandangkan senarai itu mengekalkan semua objek yang dinyahsiri.
Kaedah berasaskan strim
Untuk menangani cabaran ini, pendekatan yang lebih cekap ialah menghuraikan fail sebagai strim, membaca setiap objek satu demi satu. Kod C# berikut menunjukkan pendekatan ini:
<code class="language-csharp">JsonSerializer serializer = new JsonSerializer(); MyObject o; using (FileStream s = File.Open("bigfile.json", FileMode.Open)) using (StreamReader sr = new StreamReader(s)) using (JsonReader reader = new JsonTextReader(sr)) { while (reader.Read()) { // 当读取器遇到“{”字符时才进行反序列化 if (reader.TokenType == JsonToken.StartObject) { o = serializer.Deserialize<myobject>(reader); // 处理对象 o,例如将其写入数据库或其他地方 } } }</code>
Dalam penyelesaian ini, strim memajukan aksara demi aksara sehingga pembaca menemui pendakap pembukaan "{" yang menunjukkan permulaan objek. Kemudian gunakan kaedah Deserialize
untuk menyahsiri objek. Sebaik sahaja objek diproses, ia dibuang daripada RAM, membenarkan objek seterusnya dibaca tanpa menyimpan keseluruhan fail dalam ingatan.
Kelebihan berdasarkan penghuraian strim
Pendekatan berasaskan aliran ini mempunyai kelebihan yang ketara:
Kesimpulan
Menghuraikan fail JSON yang besar sebagai strim dalam Json.NET, dengan keupayaan untuk memproses objek individu dengan cekap tanpa membebankan RAM. Pendekatan ini amat berguna apabila penggunaan memori adalah terhad.
Atas ialah kandungan terperinci Bagaimana untuk Menghuraikan Fail JSON Besar dengan Cekap sebagai Strim dalam Json.NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!