我编写了以下扩展方法来连接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#,但我认为我不应该转换为字节数组。
答案 0 :(得分:3)
根据MSDN:
实现IBuffer接口时,必须实现IBufferByteAccess接口,该接口是用于直接访问缓冲区的COM接口。 C ++调用者使用此接口来避免复制缓冲区。
IBufferByteAccess
有以下方法:
HRESULT Buffer(
[out] byte **value
);
如果您使用C ++编写,则可以使用此界面来帮助有效地实现数据复制。但是,您在方法中使用的class System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions
也是在本机代码中实现的,因此它几乎可以充分利用IBufferByteAccess
接口。从托管代码调用方法WindowsRuntimeBufferExtensions.CopyTo
应该与在本机代码中实现其等效项并调用该实现一样快(除非自定义实现将进行较少的验证)。