2013-01-31 158 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時將此字段用作參數。我想在這種情況下,沒有辦法避免公共領域。
因此,應儘量減少內存使用量,減少一次副本。