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

  • dirkgently1

    dirkgently1

    13 NİSAN 2006
  • Fraser Raft

    Fraser Raft

    9 Mart 2010
  • Justin Schenck

    Justin Schen

    24 Kasım 2006