[英]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.