І Array.Copy, і Buffer.BlockCopy роблять те ж саме, але BlockCopy
спрямовано на швидке копіювання примітивного масиву на рівні байтів, тоді як Copy
це реалізація загального призначення. Моє запитання - за яких обставин слід використовувати BlockCopy
? Чи слід використовувати його в будь-який час, коли ви копіюєте масиви примітивного типу, або використовувати його потрібно лише в тому випадку, якщо ви кодуєте продуктивність? Чи є щось вроджене небезпечне у використанні Buffer.BlockCopy
над Array.Copy
?
byte[]
. Різниці у версії Release не було. Іноді Array.Copy
, іноді Buffer.BlockCopy
(трохи) швидше.
Array.Copy
це скоріше спеціалізована версія - наприклад, вона може копіювати тільки ті ж масиви рангів.
Marshal.Copy
:-). Ну, використовуйтеArray.Copy
для посилальних типів, складних типів значень, а якщо тип не змінюється,Buffer.BlockCopy
для "перетворення" між типами значень, байтовими масивами та байт-магією. F.ex. комбінація зStructLayout
досить потужна, якщо ви знаєте, що робите. Що стосується продуктивності, то, здається, некерований виклик доmemcpy
/cpblk
є найшвидшим для цього - див. Code4k.blogspot.nl/2010/10/… .