C # caricamento di file binari

Per favore mostrami i metodi migliori / veloci per:

1) Caricamento di file binari molto piccoli in memoria. Ad esempio icone;

2) Caricamento / lettura di file binari molto grandi di dimensioni 512 Mb +.

3) La tua scelta comune quando non vuoi pensare a dimensioni / velocità, ma devi fare solo una cosa: leggere tutti i byte in memoria?

Grazie!!!

PS Scusa forse per una domanda banale. Per favore non chiuderlo;)

PS2. Specchio della domanda analogica per Java;

1: per file molto piccoli, File.ReadAllBytes andrà bene.

2: per file molto grandi e utilizzando .net 4.0, è ansible utilizzare i file MemoryMapped.

3: Se non si utilizza. NET 4.0 di, lettura di blocchi di dati sarebbe una buona scelta

1) Userò un file di risorse piuttosto che archiviarlo come un sacco di file separati.

2) probabilmente vuoi trasmettere i dati in streaming anziché leggerli tutti in una volta, nel qual caso puoi utilizzare FileStream .

3): utilizza ReadAllBytes :

byte[] bytes = File.ReadAllBytes(path); 

1: per piccolo, File.ReadAllBytes

2: Per grande, Stream (FileStream) o BinaryReader su un stream – lo scopo è quello di rimuovere la necessità di allocare un buffer enorme, cambiando il codice per leggere piccoli blocchi consecutivamente

3: torna indietro e trova la dimensione prevista; impostazione predefinita nella peggiore delle ipotesi (n. 2)

Si noti inoltre che proverei a ridurre al minimo il siE, in primo luogo, forse attraverso la scelta del formato dei dati o della compressione.

Questo esempio è utile per entrambi: per i file di grandi dimensioni sono necessarie letture bufferizzate.

  public static byte[] ReadFile(string filePath) { byte[] buffer; FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); try { int length = (int)fileStream.Length; // get file length buffer = new byte[1024]; // create buffer int count; // actual number of bytes read int sum = 0; // total number of bytes read // read until Read method returns 0 (end of the stream has been reached) while ((count = fileStream.Read(buffer, sum, length - sum)) > 0) sum += count; // sum is a buffer offset for next reading } finally { fileStream.Close(); } return buffer; }