Cara tercepat untuk melakukan ini adalah menyimpan segala sesuatu dalam satu file dan lompat kursor ke potongan yang ingin Anda baca. Setelah Anda menekan disk membaca urutan dari titik itu cukup cepat.
Beberapa hit ke INode yang berbeda untuk menemukan lokasi file pada volume fisik yang mengambil sebagian besar waktu dan juga apa skala yang buruk.
Selain itu, karena ini dinamis, Anda juga akan memerlukan peta yang menyimpan offset dalam file untuk setiap chunk.
Pada Disk
[Chunk 1][Chunk 2][Chunk 3][Chunk 4][Chunk 5][Chunk 6][Chunk 7][Chunk 8][Chunk 9]
Terlihat
[7][8][9]
[6][1][2]
[5][4][3]
Maka Anda hanya perlu membuka aliran yang membaca dari file tetapi tidak mengunci aliran / proses lain dari mengaksesnya. Maka Anda perlu membaca dari offset yang benar untuk jarak yang benar. Saya percaya C # di bawah ini.
var chunk = new byte[4194304];
using (var file = new FileStream (openFileDialog1.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var reader = new StreamReader (file, Encoding.Unicode)) {
reader.Read(chunk, offset * 4194304, 4194304);
}
}
Sekarang karena fakta bahwa Anda membuka aliran dalam mode readonly dan memungkinkan orang lain untuk Baca / Tulis, Anda dapat terus menambahkan potongan baru sampai akhir. Catat nomor offset mereka dan jangan mencoba membacanya sebelum mereka ada di sana.
PS Anda tidak akan ingin menggunakan blok menggunakan karena Anda akan ingin hanya 1 aliran membaca sepanjang umur tingkat apa pun yang Anda gunakan. Anda juga mungkin harus menyimpan pemetaan chunk ke file lain saat keluar tetapi itu hanya satu beban ketika Anda memuat level Anda.