gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:28:53 25 4
gpt4 key购买 nike

我编写了以下扩展方法来连接 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com