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#中组合两个或多个字节数组的最佳方法,但我认为我不应该转换为字节数组.
根据 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应该与在本机代码中实现其等效项并调用该实现一样快(除非自定义实现会减少验证)。
| 归档时间: |
|
| 查看次数: |
1060 次 |
| 最近记录: |