SORU
7 EYLÜL 2009, PAZARTESİ


Dizi.Vs Tampon kopyalayın.BlockCopy

Array.Copy Buffer.BlockCopy aynı şeyi hem de, ama BlockCopy Copy Genel amaçlı bir uygulama ise hızlı byte düzeyinde ilkel dizi kopyalama amaçlı. Benim sorum - hangi şartlar altında BlockCopy kullanmalısınız. İlkel tür diziler kopyalarken, herhangi bir zamanda kullanmak gerekir, ya da sadece performans için kodlama konum kullanmalıyım? Array.Copy Buffer.BlockCopy kullanma hakkında bir şey doğası gereği tehlikeli mi var?

CEVAP
23 EYLÜL 2010, PERŞEMBE


Başka bir örnek zaman mantıklı kullanın Buffer.BlockCopy() zaman sensin sağlanan bir dizi ilkel (şort) ve dönüştürmek için bir bayt dizisi (say, iletim ağı). Silverlight AudioSink gelen ses ile uğraşırken bu yöntemi sık sık kullanıyorum. short[] bir dizi olarak örnek sağlar, ama 10* *gönderdiğiniz paket kurarken byte[] bir dizi dönüştürmek gerekir. BitConverter kullanın ve dizi ile bire bir yineleme olabilir, ama çok daha hızlı (benim test hakkında 20x) sadece bunu yapmak için:

Buffer.BlockCopy(shortSamples, 0, packetBytes, 0, shortSamples.Length * sizeof(short)).  

Ve aynı numarayı geri viteste de çalışır:

Buffer.BlockCopy(packetBytes, readPosition, shortSamples, 0, payloadLength);

Bu kasa C kadar yakın# C ve C . ortak olan bellek yönetimi (void *) sıralama için

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ADDVOiCE

    ADDVOiCE

    28 Mayıs 2009
  • Charles Renaud

    Charles Rena

    10 Kasım 2007
  • Stevie

    Stevie

    2 Mayıs 2010