在C#中分配内存块?

在C#中分配内存块?,c#,arrays,memory,memory-management,allocation,C#,Arrays,Memory,Memory Management,Allocation,在我的程序中,我分配了很多阵列(数百万个),它们的大小都非常小 因为重复分配一个大内存块比分配一个小内存块要快,所以我一直在寻找一种方法,只分配一个大内存块,保留一个指向该块中当前位置的指针以绘制下一个数组,然后在该块耗尽时分配另一个大内存块 在C#中是否可能做到这一点?如果可能,如何做到?我有一种感觉,marshall.AllocHGlobal可能是我想要的,但我不太确定C#是否有一种更为管理的方式来实现这一点 例如,我想分配一个1000字节的内存块,然后创建一个使用前4个字节的长度为4的数组

在我的程序中,我分配了很多阵列(数百万个),它们的大小都非常小

因为重复分配一个大内存块比分配一个小内存块要快,所以我一直在寻找一种方法,只分配一个大内存块,保留一个指向该块中当前位置的指针以绘制下一个数组,然后在该块耗尽时分配另一个大内存块

在C#中是否可能做到这一点?如果可能,如何做到?我有一种感觉,
marshall.AllocHGlobal
可能是我想要的,但我不太确定C#是否有一种更为管理的方式来实现这一点


例如,我想分配一个1000字节的内存块,然后创建一个使用前4个字节的长度为4的数组,然后创建一个使用后3个字节的长度为3的数组。

如果没有更多的上下文,很难回答。但听起来您正在寻找类似的东西,它是访问数组部分的抽象

使用
ArraySegment
您只需创建一个大型数组,并将其逻辑拆分为多个段

如果您创建的数百万个阵列都是短期的,那么创建并忘记它们就可以了。垃圾收集器擅长处理短期引用

请记住,垃圾收集所花费的时间与您创建的对象数量不成正比,而是与垃圾收集后存活的对象数量成正比。因此,如果对象的寿命很短,最好创建多个数组


如果数组超过85000字节,那么创建一个巨大的数组是一件坏事,因为它将位于没有在GC上压缩的LOH中。没有压缩->碎片的可能性很大。

读这个@Ryan是的,你可以用各种方式分配内存,不,你不能让CLR使用你分配给.NET数组/List/?的内存??你可以创建一个巨大的数组,并在逻辑上将其细分为更小的数组。.在Will的陈述中,这可以通过创建一个字节[1000],然后创建一个包含较小数组的位置和大小的结构来实现。然后可以存储在列表中。遗憾的是,
ArraySegment
只是完成了一半的工作。。。它甚至不直接公开索引器。(您可以将其强制转换为IList)这看起来很有希望。希望很快。谢谢