Ответ 1
В соответствии с MSDN:
Когда вы реализуете интерфейс IBuffer, вы должны реализовать IBufferByteAccess, который является COM-интерфейсом для непосредственного доступа к буфере. Вызывающие С++ используют этот интерфейс, чтобы избежать копирования буфера.
IBufferByteAccess
имеет следующий метод:
HRESULT Buffer(
[out] byte **value
);
Если вы пишете на С++, вы можете использовать этот интерфейс для эффективного внедрения копирования данных. Однако class System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions
, который вы использовали в вашем методе, также реализуется в собственном коде, поэтому он почти уверенно использует преимущества IBufferByteAccess
интерфейс. Метод вызова WindowsRuntimeBufferExtensions.CopyTo
из управляемого кода должен быть таким же быстрым, как реализация его эквивалента в собственном коде и вызов этой реализации (если только измененная реализация не сделает меньше проверки).