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

时间:2012-11-03 03:48:50

标签: 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;
}

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

我已经审核了Best way to combine two or more byte arrays in C#,但我认为我不应该转换为字节数组。

1 个答案:

答案 0 :(得分:3)

根据MSDN:

  

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

IBufferByteAccess有以下方法:

HRESULT Buffer(
  [out]  byte **value
);

如果您使用C ++编写,则可以使用此界面来帮助有效地实现数据复制。但是,您在方法中使用的class System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions也是在本机代码中实现的,因此它几乎可以充分利用IBufferByteAccess接口。从托管代码调用方法WindowsRuntimeBufferExtensions.CopyTo应该与在本机代码中实现其等效项并调用该实现一样快(除非自定义实现将进行较少的验证)。