質問

I have the need to use a blocking collection, so that I can call a delegate asynchronously. Unfortunately the delegate has two parameters consisting of a struct and an additional string. The struct is used because it is the result from a call to an external c function via Interop.
Now I am looking at a way to avoid copying the struct when using the blocking collection.
Currently my code looks like this:

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

The Consumer unpacks then the StructTransfer.

The StructTransfer currently looks like this

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

Is there an easy way with pointers to avoid the copy statements in the constructor, so that I can use the blocking collection easily?

役に立ちましたか?

解決

The best way is to create the transfer class first.
Use the struct as a field of the transfer class and use this field as a parameter when calling the interop. I guess there is no way to avoid the public field in this case.
Thus memory usage should be minimized and one copy happens less.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top