C# .Net (3.5 ve üstü) 'de, işlemde bir çöp üretmeden bir değişkeni bir bayt [] arabelleğine kopyalamak mümkün mü? ÖrneğinC# Değişkenler çöp oluşturmadan arabelleğe kopyalansın mı?
: bitsel operatörleri kullanarak eğer
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));
...
çöp (a ref varsayarsak artık buna tutulur) olur byte [] bayt aracı nesne oluşturur ...
acaba değişken ara bellek [] oluşturmadan doğrudan arabelleğe kopyalanabilir?
Evet, bu mümkün, ama bana erken gibi optimize ediyor gibi geliyor. Küçük bayt dizileri ve benzerleri gibi bir yöntem çağrısında oluşturduğunuz çöpün tümü Gen 0 nesnesidir ve büyük olasılıkla birkaç milisaniye veya muhtemelen daha az toplanır. CLR'de geçici nesne tahsisi ve koleksiyonu son derece verimlidir. – codekaizen
Whare Gen 0 nesnesidir? – markmnl
(Endişeniz için - Optimizasyonun zamansız olduğunu düşünmüyorum - Ben böyle kulağa nasıl geldiğimi bilmiyorum - Telefonların kullanacağı ve arabelleği 100'ün muhtemelen binlerce kez bir secound kullanan bir kütüphane yazıyorum - ve GC, bu tür kaynak kısıtlı cihazlarla ilgili bir endişe kaynağıdır). – markmnl