E 'possibile in C# .Net (3.5 e versioni successive) copiare una variabile in un buffer byte [] senza creare alcuna spazzatura nel processo?C# Copia le variabili nel buffer senza creare garbage?
Ad esempio:
int variableToCopy = 9861;
byte[] buffer = new byte[1024];
byte[] bytes = BitConverter.GetBytes(variableToCopy);
Buffer.BlockCopy(bytes, 0, buffer, 0, 4);
float anotherVariableToCopy = 6743897.6377f;
bytes = BitConverter.GetBytes(anotherVariableToCopy);
Buffer.BlockCopy(bytes, 0, buffer, 4, sizeof(float));
...
crea l'oggetto intermedio byte [] bytes che diventa spazzatura (presumendo un ref non è più tenuto ad esso) ...
Chissà se utilizzando operatori bit per bit i la variabile può essere copiata direttamente nel buffer senza creare il byte intermedio []?
Sì, è possibile, ma a me sembra che tu stia ottimizzando prematuramente. I rifiuti che crei in una chiamata al metodo, come piccoli array di byte e simili, sono tutti oggetti Gen 0 e verranno raccolti probabilmente in un paio di millisecondi o, probabilmente, anche meno. L'allocazione e raccolta temporanea di oggetti nel CLR è estremamente efficiente. – codekaizen
Whare sono oggetti Gen 0? – markmnl
(Per la tua preoccupazione - non penso che l'ottimizzazione sia prematura - non sono sicuro di come suonassi così - sto scrivendo una libreria che verrà usata dai telefoni e usando il buffer 100 forse un migliaio di volte un secondo - e il GC è una preoccupazione per tali dispositivi con risorse limitate). – markmnl