Array.Copy et Buffer.BlockCopy font tous deux la même chose, mais BlockCopy
visent à une copie rapide de tableaux primitifs au niveau des octets, alors que Copy
c'est l'implémentation à usage général. Ma question est - dans quelles circonstances devriez-vous utiliser BlockCopy
? Devez-vous l'utiliser à tout moment lorsque vous copiez des tableaux de types primitifs, ou devriez-vous l'utiliser uniquement si vous codez pour les performances? Y a-t-il quelque chose de intrinsèquement dangereux à utiliser Buffer.BlockCopy
over Array.Copy
?
byte[]
. Il n'y avait aucune différence dans la version Release. Parfois Array.Copy
, parfois Buffer.BlockCopy
(légèrement) plus vite.
Array.Copy
est plutôt une version spécialisée - par exemple, elle ne peut copier que les mêmes tableaux de rangs.
Marshal.Copy
:-). Eh bien, utilisezArray.Copy
pour les types de référence, les types de valeurs complexes et si le type ne change pas,Buffer.BlockCopy
pour la "conversion" entre les types de valeurs, les tableaux d'octets et la magie d'octets. Par ex. la combinaison avecStructLayout
est assez puissante si vous savez ce que vous faites. En ce qui concerne les performances, il semble qu'un appel non géré versmemcpy
/cpblk
soit le plus rapide pour cela - voir code4k.blogspot.nl/2010/10/… .