Uso un BinaryReader (MemoryStream(MyByteArray)
) per leggere record di dimensioni variabili ed elaborarli tutti in memoria. Funziona bene fino a quando il mio puntatore, che è nell'array, ha una dimensione inferiore a circa 1,7 GB. Dopo di ciò (che è la dimensione massima di un intero nel mio sistema a 64 bit) non è possibile creare un bytearray più grande, anche se ho abbastanza memoria reale. Quindi la mia soluzione è stata quella di leggere il filmato e dividerlo in più array di byte.Lettura da un enorme MemoryStream in C#
Ora, tuttavia, non riesco a "leggere" oltre i limiti dell'array di byte e, poiché i miei dati sono in un formato variabile, non posso garantire che gli array di byte finiscano sempre su un intero record.
Questo deve essere un problema comune per le persone che elaborano set di dati molto grandi e che hanno ancora bisogno di velocità.
Come posso gestire questo problema?
È necessario impedire che un array di byte di queste dimensioni sia caricato in memoria per cominciare. Non è possibile implementare una soluzione di streaming in cui si caricano solo parti dell'array in memoria (un buffer)? Hai bisogno di un accesso casuale a questi byte? Oppure puoi utilizzare una soluzione forward-only in cui puoi leggere lo stream dall'inizio alla fine mentre lo elabori (e senza voltarti indietro). Da dove viene questa matrice di byte? Un file, un servizio web, ...? –