2014-10-06 29 views
0

將對象傳遞給非託管代碼如何影響其垃圾回收?我是否需要做任何明確的處理對象?如何正確處理對象傳遞給DllImport方法

我設置了一個非託管串行端口,並且必須將「設備控制塊」(DCB)對象作爲設置端口的一部分傳遞給非託管代碼。現在,當我處理端口對象時,我是否還需要做其他任何事情來處理DCB?

+0

DCB是一個結構體,而不是一個對象。它不需要任何處理,它不存儲任何操作系統資源。只是簡單的價值。不要幫助,沒有必要。和[借用](http://referencesource.microsoft.com/#System/compmod/microsoft/win32/UnsafeNativeMethods.cs#366),不要自己寫。 – 2014-10-06 19:14:41

回答

0

垃圾收集僅適用於託管資源。有一個原因爲一次性使用模式和Dispose方法。它用於處理非託管資源。類似於FileReader,其中OS文件處理程序將是非託管代碼,可通過託管代碼訪問.Net框架。處置FileWriter/Reader將實際釋放非託管資源的句柄。

在你的情況下,你不必對DCB做任何事情。它似乎沒有持有任何非託管資源。它只傳遞給一個非託管資源。

+0

因爲它被傳遞給一個非託管資源,我可以認爲它不再需要時會被丟棄嗎? – Zeus82 2014-10-06 19:11:34

+0

@Jeeve,DCB是否有非託管資源?從你的問題看起來不是。如果沒有非託管資源,則不需要「處理」它,它將在方法/部分結束時超出範圍。 – CriketerOnSO 2014-10-06 19:13:06