加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#将变量复制到缓冲区而不创建垃圾?

发布时间:2020-12-15 05:38:25 所属栏目:百科 来源:网络整理
导读:是否可以在C#.Net(3.5及更高版本)中将变量复制到byte []缓冲区而不在进程中创建任何垃圾? 例如: int variableToCopy = 9861;byte[] buffer = new byte[1024];byte[] bytes = BitConverter.GetBytes(variableToCopy);Buffer.BlockCopy(bytes,buffer,4);floa
是否可以在C#.Net(3.5及更高版本)中将变量复制到byte []缓冲区而不在进程中创建任何垃圾?

例如:

int variableToCopy = 9861;

byte[] buffer = new byte[1024];
byte[] bytes = BitConverter.GetBytes(variableToCopy);
Buffer.BlockCopy(bytes,buffer,4);

float anotherVariableToCopy = 6743897.6377f;
bytes = BitConverter.GetBytes(anotherVariableToCopy);
Buffer.BlockCopy(bytes,4,sizeof(float));

...

创建byte []字节中间对象变为垃圾(假设ref不再持有)…

我想知道如果使用按位运算符,变量可以直接复制到缓冲区而不创建中间字节[]?

解决方法

使用指针是最好和最快的方法:
您可以使用任意数量的变量执行此操作,没有浪费的内存,固定语句有一点开销,但它太小
int v1 = 123;
        float v2 = 253F;
        byte[] buffer = new byte[1024];
        fixed (byte* pbuffer = buffer)
        {
            //v1 is stored on the first 4 bytes of the buffer:
            byte* scan = pbuffer;
            *(int*)(scan) = v1;
            scan += 4; //4 bytes per int

            //v2 is stored on the second 4 bytes of the buffer:
            *(float*)(scan) = v2;
            scan += 4; //4 bytes per float
        }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读