Array.Copy e Buffer.BlockCopy fazem a mesma coisa, mas BlockCopy
têm como objetivo a cópia rápida da matriz primitiva no nível de bytes, enquanto Copy
é a implementação de uso geral. Minha pergunta é - em que circunstâncias você deve usar BlockCopy
? Você deve usá-lo a qualquer momento quando estiver copiando matrizes de tipo primitivo ou deve usá-lo apenas se estiver codificando para desempenho? Existe algo inerentemente perigoso sobre o uso Buffer.BlockCopy
excessivo Array.Copy
?
byte[]
. Não houve diferença na versão Release. Às vezes Array.Copy
, às vezes Buffer.BlockCopy
(um pouco) mais rápido.
Array.Copy
é uma versão especializada - por exemplo, ele pode copiar apenas as mesmas matrizes de classificação.
Marshal.Copy
:-). Bem, useArray.Copy
para tipos de referência, tipos de valor complexos e, se o tipo não for alterado,Buffer.BlockCopy
para "conversão" entre tipos de valor, matrizes de bytes e magia de bytes. F.ex. a combinação comStructLayout
é bastante poderosa se você souber o que está fazendo. Quanto ao desempenho, parece que uma chamada não gerenciada paramemcpy
/cpblk
é a mais rápida para isso - consulte code4k.blogspot.nl/2010/10/… .