我编写了以下扩展方法来连接 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#但我认为我不应该与字节数组相互转换。
最佳答案
根据 MSDN:
When you implement the IBuffer interface, you must implement the IBufferByteAccess interface, which is a COM interface for accessing the buffer directly. C++ callers use this interface to avoid making a copy of the buffer.
IBufferByteAccess
有以下方法:
HRESULT Buffer(
[out] byte **value
);
如果你用C++编写,你可以使用这个接口(interface)来方便高效地实现数据复制。然而,class System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions
,您在方法中使用的,也在 native 代码中实现,因此它几乎可以肯定地利用了 IBufferByteAccess
接口(interface)。从托管代码调用方法 WindowsRuntimeBufferExtensions.CopyTo
应该与在 native 代码中实现其等价物并调用该实现一样快(除非自定义实现会减少验证)。
关于c# - 连接两个 Windows 运行时缓冲区的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13205759/