2013-01-31 43 views
0

我需要使用阻塞集合,以便我可以异步调用委托。不幸的是,委托有两个参数,包括一个结构和一个额外的字符串。使用该结构是因为它是通过Interop调用外部c函数的结果。
现在我正在寻找一种避免在使用阻塞集合时复制结构的方法。
目前我的代码看起来是这样的:C#结构和指针

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

消费者解压然后StructTransfer。

的StructTransfer目前看起来像这样

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

是否与指针一个简单的方法,以避免在构造函数中复制报表,这样我就可以方便地使用阻塞集合?

+3

为什么要使用结构而不是类?一个类自动使用指针。 – Destrictor

+5

您的队列将由该结构类型的*值*组成。没有复制,这怎么可能工作? (你有没有考虑过使用一个班级?无论哪种方式,*请*沟公共领域...) –

+1

什么复制报表? – Jodrell

回答

0

最好的方法是先创建转移类。
使用该结构作为传输类的字段,并在调用interop时将此字段用作参数。我想在这种情况下,没有办法避免公共领域。
因此,应尽量减少内存使用量,减少一次副本。