簡體   English   中英

UInt32 []與UInt32 *

[英]UInt32[] versus UInt32*

大家下午好,

我一直在通過InteropServices.DllImport訪問一些外部DLL。 我最初解決了一些不安全的代碼如下:

internal extern static unsafe void CreateArray(Int32 size, [OutAttribute] UInt32* array);

但是,我認為通過傳遞UInt32數組而不是指針,可以用純粹安全的代碼替換這個不安全的代碼。 代碼更改為

internal extern static void CreateArray(Int32 size, [OutAttribute] UInt32[] array);

這似乎沒有任何問題。 但是,我謹慎行事。 GC現在可能出現並導致問題嗎? 傳遞數組和傳遞UInt32指針之間有很大的區別嗎? 是否有我失蹤的角落案件?

感謝您的見解,

Giawa

后者很好。 CreateArray正在執行時,P / Invoke層會將托管數組固定在內存中,並且這種方法不需要編組,因為UInt32[]是一個blittable類型 因此,這與使用指針一樣快。

使用前一個聲明,您將不得不將內存復制到適當的托管數組中,除非您要完全通過指針對輸出進行操作。 而這種復制會更昂貴。 因此,換句話說,如果您試圖從調用中獲取正確的托管數組,則使用后一種語法將表現更好,並且不需要手動數據提取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM