Tôi sử dụng BinaryReader (MemoryStream(MyByteArray)
) để đọc các bản ghi có kích thước biến đổi và xử lý tất cả chúng trong bộ nhớ. Điều này hoạt động tốt miễn là luồng tối ưu của tôi, nằm trong mảng, nhỏ hơn khoảng 1,7 GB. Sau đó (đó là kích thước tối đa của một số nguyên trong hệ thống 64-bit của tôi), bạn không thể tạo ra một khoảng trống lớn hơn, mặc dù tôi có đủ bộ nhớ thực. Vì vậy, giải pháp của tôi đã được đọc bytestream và chia nó thành nhiều mảng byte. Tuy nhiên, bây giờ tuy nhiên, tôi không thể "đọc" qua các ranh giới mảng byte, và, vì dữ liệu của tôi ở định dạng biến, tôi không thể đảm bảo rằng mảng byte luôn kết thúc trên toàn bộ bản ghi. Quay lại đầu trangĐọc từ một MemoryStream lớn trong C#
Đây phải là vấn đề phổ biến đối với những người xử lý các tập dữ liệu rất lớn và vẫn có nhu cầu về tốc độ.
Làm cách nào để xử lý sự cố này?
Bạn nên ngăn chặn rằng một mảng byte có kích thước này được tải vào bộ nhớ để bắt đầu. Không phải là nó có thể thực hiện một giải pháp streaming, nơi bạn chỉ tải các phần của mảng vào bộ nhớ (một bộ đệm)? Bạn có cần quyền truy cập ngẫu nhiên vào các byte này không? Hoặc bạn có thể sử dụng giải pháp chuyển tiếp chỉ nơi bạn có thể đọc luồng từ đầu đến cuối trong khi xử lý luồng (và không cần nhìn lại). Mảng byte này đến từ đâu? Tệp, dịch vụ web, ...? –