0
我有一個字節數組(來自套接字),我想將它複製到一個結構體中。 我已經不再使用Marshal.Copy了,因爲這是我的理解,分配託管內存而不是堆棧內存。 (這些數據速度相當快,並且在保存到磁盤之前壽命很短,所以我希望避免創建很多短期管理對象。)使用C#中的指針將數據從byte []複製到結構體
如何從字節逐個複製字節[]到結構中?
我有一個字節數組(來自套接字),我想將它複製到一個結構體中。 我已經不再使用Marshal.Copy了,因爲這是我的理解,分配託管內存而不是堆棧內存。 (這些數據速度相當快,並且在保存到磁盤之前壽命很短,所以我希望避免創建很多短期管理對象。)使用C#中的指針將數據從byte []複製到結構體
如何從字節逐個複製字節[]到結構中?
最終代碼看起來是這樣的:
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
顯示的方法快31倍你是指堆內存而不是託管內存?是什麼讓你認爲在堆上創建很多短暫的對象是不好的? – 2011-03-14 12:23:22
短期對象實際上*瘋狂*便宜 - GEN0便宜沖洗 – 2011-03-14 12:24:57
我的意思是堆棧內存,而不是堆。這並不一定是壞的,但是在堆中分配和釋放結構或類會有一些開銷(涉及gc)。 – lejon 2011-03-14 12:25:53