Più efficiente (più veloce) da utilizzare Buffer.BlockCopy
nel corso Array.CopyTo
,
int[] x = new int [] { 1, 2, 3};
int[] y = new int [] { 4, 5 };
int[] z = new int[x.Length + y.Length];
var byteIndex = x.Length * sizeof(int);
Buffer.BlockCopy(x, 0, z, 0, byteIndex);
Buffer.BlockCopy(y, 0, z, byteIndex, y.Length * sizeof(int));
Ho scritto un semplice programma di test che "riscalda il jitter", compilato in modalità di rilascio ed eseguito senza un debugger collegato, sulla mia macchina.
Per 10.000.000 di iterazioni dell'esempio nella domanda
Concat ha impiegato 3088ms
CopyTo ha impiegato 1079ms
BlockCopy ha impiegato 603ms
Se modifico gli array di test in due sequenze da 0 a 99, ottengo risultati simili a questo,
Concat ha richiesto 45945ms
CopyTo ha richiesto 2230ms
BlockCopy ha impiegato 1689ms
Da questi risultati posso affermare che i metodi CopyTo
e BlockCopy
sono significativamente più efficienti di Concat
e, inoltre, se le prestazioni sono un obiettivo,BlockCopy
hanno un valore superiore CopyTo
.
Per mettere in guardia questa risposta, se le prestazioni non contano, o ci saranno poche iterazioni, scegli il metodo che ritieni più semplice. Buffer.BlockCopy
offre alcune utilità per la conversione dei tipi oltre lo scopo di questa domanda.