Apabila berurusan dengan fail teks yang sangat besar yang mencapai saiz gigabait, membacanya dengan cekap adalah penting untuk mengekalkan prestasi. Dalam .NET, terdapat beberapa pendekatan untuk menangani cabaran ini.
Satu kaedah ialah memanfaatkan kelas StreamReader dengan kaedah ReadLine yang serba boleh. Walau bagaimanapun, untuk fail sebesar 1 GB, pendekatan ini boleh menjadi rumit dan perlahan. Penyelesaian yang lebih dioptimumkan ialah menggunakan MemoryMappedFile, sebuah kelas yang direka secara eksplisit untuk mengendalikan fail besar dalam .NET 4.0 dan lebih baru.
Untuk menggunakan MemoryMappedFile, anda boleh mencipta contoh kelas seperti itu:
MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(filePath, FileMode.Open, null, fileLength);
Setelah fail dipetakan memori diwujudkan, anda boleh terus mengakses kandungan fail tanpa membacanya ke dalam memori. Pendekatan ini memberikan keuntungan prestasi yang ketara untuk operasi fail besar.
Sebagai contoh, untuk membaca baris daripada fail menggunakan MemoryMappedFile:
byte[] buffer = new byte[1024]; mmf.CreateViewAccessor().ReadArray(byteOffset, buffer, 0, bufferSize); string line = Encoding.UTF8.GetString(buffer);
Sebagai alternatif, jika anda lebih suka menggunakan StreamReader, anda boleh mengoptimumkan proses pembacaan dengan menggunakan penimbal:
using (StreamReader sr = new StreamReader(filePath)) { char[] buffer = new char[4096]; int charsRead; while ((charsRead = sr.ReadBlock(buffer, 0, buffer.Length)) != 0) { // Process the buffered data... } }
Dengan menggunakan bacaan berasaskan penimbal, anda boleh mengurangkan bilangan operasi capaian cakera, menghasilkan prestasi yang lebih baik untuk fail besar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membaca Fail Teks 1GB dengan Cekap dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!