12

Windowsランタイムアプリケーションで2つの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;
}

これはこれを処理するための最も効率的な方法ですか?より良いまたはより簡単な方法はありますか?

C#で2つ以上のバイト配列を組み合わせる最良の方法を確認しましたが、バイト配列との間で変換する必要はないと思います。

4

1 に答える 1

3

MSDNによると:

IBufferインターフェイスを実装するときは、バッファに直接アクセスするためのCOMインターフェイスであるIBufferByteAccessインターフェイスを実装する必要があります。C ++の呼び出し元は、このインターフェイスを使用して、バッファーのコピーを作成しないようにします。

IBufferByteAccess次の方法があります。

HRESULT Buffer(
  [out]  byte **value
);

C ++で作成する場合は、このインターフェイスを使用して、データコピーの効率的な実装を容易にすることができます。ただし、class System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensionsメソッドで使用した、はネイティブコードでも実装されているため、ほぼ確実にIBufferByteAccessインターフェイスを利用します。マネージコードからのメソッドの呼び出しWindowsRuntimeBufferExtensions.CopyToは、ネイティブコードで同等のものを実装し、その実装を呼び出すのと同じくらい高速である必要があります(カスタマイズされた実装で検証が少なくなる場合を除く)。

于 2012-12-19T02:04:15.153 に答える