C# 使用C中的指针将数据从字节[]复制到结构
我想将套接字中的字节数组复制到结构中。 据我所知,我已经不再使用Marshal.Copy,因为它分配托管内存,而不是堆栈内存。数据以相当快的速度出现,并且在保存到磁盘之前的寿命很短,因此我希望避免创建许多寿命很短的托管对象C# 使用C中的指针将数据从字节[]复制到结构,c#,C#,我想将套接字中的字节数组复制到结构中。 据我所知,我已经不再使用Marshal.Copy,因为它分配托管内存,而不是堆栈内存。数据以相当快的速度出现,并且在保存到磁盘之前的寿命很短,因此我希望避免创建许多寿命很短的托管对象 如何将字节[]逐字节复制到结构中?最终代码如下所示: unsafe void CastData(out SomeStructure someStruct, byte[] bytes) { fixed (byte* pSource = bytes) {
如何将字节[]逐字节复制到结构中?最终代码如下所示:
unsafe void CastData(out SomeStructure someStruct, byte[] bytes)
{
fixed (byte* pSource = bytes)
{
fixed (SomeStructure* pDest = &someStruct)
{
*pDest = *((SomeStructure*)pSource);
}
}
}
据我理解,这应该是完全确定和安全的
假设是这样,那么我发现不安全的方法的速度大约是中所示方法的31倍,例如您是指堆内存而不是托管内存?是什么让你认为在堆上创建大量短期对象是不好的?短期对象实际上非常便宜-GEN0对于堆栈内存而不是堆来说非常便宜。这不一定是坏事,但是,在gc涉及的堆上分配和释放结构或类时会有一些开销。事实上,您的问题不包含我分析并发现的关于gc或gc性能计数器或Gen2的短语,这让我95%相信,您对堆上的许多短期对象没有任何问题你能引用一下这句话吗?成本或缺货成本是否与物品数量成正比?