0

デリゲートを非同期的に呼び出すことができるように、ブロッキング コレクションを使用する必要があります。残念ながら、デリゲートには、構造体と追加の文字列で構成される 2 つのパラメーターがあります。構造体が使用されるのは、Interop を介した外部 C 関数への呼び出しの結果であるためです。
現在、ブロッキング コレクションを使用するときに構造体をコピーしないようにする方法を検討しています。
現在、私のコードは次のようになっています。

ConsumerQueue.Enqueue(new StructTransfer(structValue, stringValue));

Consumer は StructTransfer をアンパックします。

StructTransfer は現在、次のようになっています。

public struct Transfer{
    public StructValue structValue;
    public string stringValue;
    public Transfer(StructValue structValue, string stringValue){
      this.structValue=structValue;
      this.stringValue = stringValue;
    }
}

ブロッキングコレクションを簡単に使用できるように、ポインターを使用してコンストラクターのコピーステートメントを回避する簡単な方法はありますか?

4

1 に答える 1

0

最善の方法は、最初に転送クラスを作成することです。
構造体を転送クラスのフィールドとして使用し、相互運用を呼び出すときにこのフィールドをパラメーターとして使用します。この場合、 public フィールドを回避する方法はないと思います。
したがって、メモリ使用量を最小限に抑える必要があり、1 つのコピーの発生が少なくなります。

于 2013-01-31T11:42:29.253 に答える