Cách nhanh nhất để làm điều này là lưu trữ mọi thứ trong một tệp và nhảy con trỏ đến đoạn bạn muốn đọc. Một khi bạn nhấn vào đĩa đọc một chuỗi từ đó điểm của anh ấy khá nhanh.
Nhiều lần truy cập vào các INodes khác nhau để tìm vị trí của tệp trên ổ đĩa vật lý, những gì nó chiếm phần lớn thời gian và cả những gì có tỷ lệ kém.
Ngoài ra, vì điều này là động, bạn cũng sẽ cần một bản đồ lưu trữ phần bù trong tệp cho mỗi đoạn.
Trên đĩa
[Chunk 1][Chunk 2][Chunk 3][Chunk 4][Chunk 5][Chunk 6][Chunk 7][Chunk 8][Chunk 9]
Có thể nhìn thấy
[7][8][9]
[6][1][2]
[5][4][3]
Sau đó, bạn chỉ cần mở một luồng đọc từ tệp nhưng không khóa các luồng / quy trình khác truy cập vào nó. Sau đó, bạn cần đọc từ phần bù chính xác cho khoảng cách chính xác. Tôi tin vào C # đó là dưới đây.
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);
}
}
Bây giờ vì thực tế là bạn đã mở luồng ở chế độ chỉ đọc và cho phép người khác đọc / ghi vào đó, bạn có thể tiếp tục thêm các đoạn mới vào cuối. Chỉ cần theo dõi số bù của chúng và đừng cố đọc chúng trước khi chúng ở đó.
PS bạn sẽ không muốn sử dụng khối sử dụng vì bạn sẽ chỉ muốn 1 luồng đọc trong suốt vòng đời của cấp độ bạn đang sử dụng. Ngoài ra, bạn có thể phải lưu ánh xạ chunk vào một tệp khác khi thoát nhưng đó chỉ là một tải khi bạn tải cấp của mình.