2011-03-14 30 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