jest to możliwe, C# NET (3,5 i powyżej), aby skopiować zmienną w [] buforze bajtów bez tworzenia śmieci w procesie?C# Kopiowanie zmiennych do bufora bez tworzenia śmieci?
Na przykład:
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));
...
tworzy byte [] bajtów pośrednika przedmiot, który staje się śmieci (zakładając ref nie jest już utrzymywane do niego) ...
Zastanawiam się, czy za pomocą tych operatorów bitowe zmienna może być skopiowana bezpośrednio do bufora bez tworzenia bajta pośredniego []?
Tak, jest to możliwe, ale brzmi to tak, jak przedwcześnie optymalizujesz. Śmieci, które tworzysz w wywołaniu metody, podobnie jak tablice o małych bajtach i tym podobne, są obiektami klasy 0 i będą zbierane prawdopodobnie w ciągu kilku milisekund lub prawdopodobnie nawet mniej. Efemeryczny przydział i gromadzenie obiektów w CLR jest niezwykle wydajny. – codekaizen
Co to są obiekty typu 0? – markmnl
(Dla Twojej uwagi - nie sądzę, że optymalizacja jest przedwczesna - nie jestem pewien, jak to brzmiałem - piszę bibliotekę, która będzie używana przez telefony i używająca bufora 100 prawdopodobnie tysiące razy na sekundę - i GC jest problemem związanym z urządzeniami o ograniczonych zasobach). – markmnl