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

标签 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#但我认为我不应该与字节数组相互转换。

最佳答案

根据 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/

相关文章:

c# - 在 C# 中向许多收件人发送电子邮件检查哪个失败

c# - WPF 3D算法题: what model does it use?

c++ - C++/CX 是否检测和解决对象循环?

c# - 替代 CurrentManagedThreadId 在等待过程中保持不变?

c# - 如何使用 .NET Framework 获取所有事件的 TCP 连接(无非托管 PE 导入!)?

c# - XNA 游戏 - 播放视频作为起始屏幕

c# - 如何统计来自db的搜索内容

c++ - _wfopen_s 在 Windows Phone 应用程序中无法正常工作

c# - 在不分组的情况下使用 Metro 风格的 GridView

javascript - WinRT Javascript 应用程序中的 Google API OAuth 2.0