Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C中的指针将数据从字节[]复制到结构_C# - Fatal编程技术网

C# 使用C中的指针将数据从字节[]复制到结构

C# 使用C中的指针将数据从字节[]复制到结构,c#,C#,我想将套接字中的字节数组复制到结构中。 据我所知,我已经不再使用Marshal.Copy,因为它分配托管内存,而不是堆栈内存。数据以相当快的速度出现,并且在保存到磁盘之前的寿命很短,因此我希望避免创建许多寿命很短的托管对象 如何将字节[]逐字节复制到结构中?最终代码如下所示: unsafe void CastData(out SomeStructure someStruct, byte[] bytes) { fixed (byte* pSource = bytes) {

我想将套接字中的字节数组复制到结构中。 据我所知,我已经不再使用Marshal.Copy,因为它分配托管内存,而不是堆栈内存。数据以相当快的速度出现,并且在保存到磁盘之前的寿命很短,因此我希望避免创建许多寿命很短的托管对象


如何将字节[]逐字节复制到结构中?

最终代码如下所示:

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%相信,您对堆上的许多短期对象没有任何问题你能引用一下这句话吗?成本或缺货成本是否与物品数量成正比?