Vorrei ottenere byte[]
da un float[]
il più rapidamente possibile, senza eseguire il ciclo attraverso l'intero array (tramite un cast, probabilmente). Il codice non sicuro va bene. Grazie!Qual è il modo più veloce per convertire un float [] in un byte []?
Sto cercando un array di byte 4 volte più lungo dell'array float (la dimensione dell'array di byte sarà 4 volte quella dell'array float, poiché ogni float è composto da 4 byte). Lo passerò a un BinaryWriter.
EDIT: Per quei critici che urlano "ottimizzazione prematura": Ho benchmark questo utilizzando ANTS Profiler prima ho ottimizzato. C'è stato un aumento significativo della velocità perché il file ha una cache write-through e l'array float è esattamente dimensionato per corrispondere alla dimensione del settore sul disco. Il writer binario racchiude un handle di file creato con l'API di Win32 pinvoke
. L'ottimizzazione si verifica poiché questo riduce il numero di chiamate di funzione.
E, per quanto riguarda la memoria, questa applicazione crea enormi cache che utilizzano molta memoria. Posso allocare il buffer di byte una volta e riutilizzarlo più volte - l'utilizzo della doppia memoria in questa particolare istanza equivale a un errore di arrotondamento nel consumo totale di memoria dell'app.
Quindi credo che la lezione qui è di non fare ipotesi premature;)
Cosa vuole realmente ? Ogni float lanciato su un byte o su un array quattro volte più lungo contenente la rappresentazione in byte dei float? – Khoth
Che cosa significa "quattro volte più lungo"? – ryeguy
Sarebbe utile sapere cosa si intende utilizzare i byte * per * dopo. La risposta accettata non è ottimale in diverse situazioni se si è disposti a utilizzare codice non sicuro ... – ShuggyCoUk