Я использую BinaryReader (MemoryStream(MyByteArray)
), чтобы читать записи с переменным размером и обрабатывать их все в памяти. Это работает хорошо, пока мой байтовый поток, который находится в массиве, составляет менее 1,7 ГБ. После этого (это максимальный размер целого числа в моей 64-битной системе) вы не можете создать более крупный bytearray, хотя у меня достаточно реальной памяти. Поэтому мое решение состояло в том, чтобы прочитать байтовый поток и разбить его на несколько байтовых массивов.Читайте с огромного MemoryStream в C#
Теперь, однако, я не могу «прочитать» границы массива байтов, и, поскольку мои данные находятся в переменном формате, я не могу гарантировать, что массивы байтов всегда заканчиваются на целой записи.
Это должно быть распространенной проблемой для людей, обрабатывающих очень большие наборы данных и все еще нуждающихся в скорости.
Как справиться с этой проблемой?
Вы должны предотвратить загрузку массива байтов этого размера в память. Разве невозможно реализовать потоковое решение, в котором вы загружаете только части массива в память (буфер)? Вам нужен произвольный доступ к этим байтам? Или вы можете использовать прямое решение, где вы можете читать поток от начала до конца, обрабатывая его (и не оглядываясь). Откуда этот массив байтов? Файл, веб-сервис, ...? –