2011-03-14 32 views
0

我有一個字節數組(來自套接字),我想將它複製到一個結構體中。 我已經不再使用Marshal.Copy了,因爲這是我的理解,分配託管內存而不是堆棧內存。 (這些數據速度相當快,並且在保存到磁盤之前壽命很短,所以我希望避免創建很多短期管理對象。)使用C#中的指針將數據從byte []複製到結構體

如何從字節逐個複製字節[]到結構中?

+0

顯示的方法快31倍你是指堆內存而不是託管內存?是什麼讓你認爲在堆上創建很多短暫的對象是不好的? – 2011-03-14 12:23:22

+3

短期對象實際上*瘋狂*便宜 - GEN0便宜沖洗 – 2011-03-14 12:24:57

+0

我的意思是堆棧內存,而不是堆。這並不一定是壞的,但是在堆中分配和釋放結構或類會有一些開銷(涉及gc)。 – lejon 2011-03-14 12:25:53

回答

0

最終代碼看起來是這樣的:

unsafe void CastData(out SomeStructure someStruct, byte[] bytes) 
{ 
    fixed (byte* pSource = bytes) 
    { 
     fixed (SomeStructure* pDest = &someStruct) 
     { 
      *pDest = *((SomeStructure*)pSource); 
     } 
    } 
} 

據我瞭解,這應該是完全確定的,「安全」。

假設它是,那麼我發現不安全的方法是約。比(例如)http://thecodeisart.blogspot.com/2008/11/with-this-class-you-can-easy-convert.html