Use Buffer.BlockCopy instead of Array.Copy for better performance
Buffer.BlockCopy is faster than Array.Copy when you are copying primitive arrays (arrays of type System.Int32, System.Char and so forth).
The reason is because (with base on the SSCLI implementation) both Buffer.Blockcopy and Array.Copy, call the method m_memmove (declared in comsystem.cpp) that copies data byte per byte from one array to another, but the major difference is that Array.Copy performs more validations and operations than Buffer.BlockCopy before calling m_memmove.
Buffer.BlockCopy just checks if bonderies are valid and if the array's data type is primitive, but Array.Copy checks thinks like type compatibility, casting, boxing, unboxing, among other things.
