连接两个Windows运行时缓冲区的最佳方法是什么?

Mat*_*int 12 c# windows-runtime

我编写了以下扩展方法来连接Windows运行时应用程序中的两个IBuffer对象:

public static IBuffer Concat(this IBuffer buffer1, IBuffer buffer2)
{
    var capacity = (int) (buffer1.Length + buffer2.Length);
    var result = WindowsRuntimeBuffer.Create(capacity);
    buffer1.CopyTo(result);
    buffer2.CopyTo(0, result, buffer1.Length, buffer2.Length);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这是处理这个问题最有效的方法吗?有更好或更简单的方法吗?

我已经回顾了在C#中组合两个或多个字节数组的最佳方法,但我认为我不应该转换为字节数组.

Rom*_*iko 3

根据 MSDN:

实现IBuffer接口时,必须实现IBufferByteAccess接口,该接口是用于直接访问缓冲区的 COM 接口。C++ 调用者使用此接口来避免复制缓冲区。

IBufferByteAccess有以下方法:

HRESULT Buffer(
  [out]  byte **value
);
Run Code Online (Sandbox Code Playgroud)

如果你用C++编写,可以使用这个接口来方便高效地实现数据复制。但是,class System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions您在方法中使用的 也是在本机代码中实现的,因此它几乎肯定会利用该IBufferByteAccess接口。从托管代码调用方法WindowsRuntimeBufferExtensions.CopyTo应该与在本机代码中实现其等效项并调用该实现一样快(除非自定义实现会减少验证)。