[英]Allocating a block of memory in C#?
在我的程序中,我分配了很多數組(百萬個),它們的大小都非常小。
因為重復分配大塊內存比小塊內存要快,所以我一直在尋找一種方法來分配大塊內存,保持指向該塊中當前位置的指針以從中提取下一個數組,然后當另一個大塊用完時分配它。
這可以在C#中完成嗎?如果可以,怎么辦? 我有一個Marshal.AllocHGlobal
的感覺,也許我正在尋找,但是我不確定C#是否具有更受管理的方式。
例如,我要分配一個1,000字節的內存塊,然后創建一個使用前4個字節的長度為4的數組,然后創建一個使用后3個字節的長度為3的數組。
沒有更多背景,很難回答。 但是聽起來您正在尋找類似ArraySegment的東西,它是訪問數組部分的抽象。
使用ArraySegment
您可以只創建一個大型數組,並在邏輯上將其拆分為多個段。
如果您創建的數百萬個數組壽命很短,那么可以創建並忘記它們。 垃圾收集器擅長處理短命引用。
請記住,垃圾回收所花費的時間並不與您創建的對象數量成正比,而是與在垃圾回收中幸存的對象數量成正比。 因此,如果對象壽命短,那么最好創建許多數組。
如果大於85,000字節,那么創建一個巨大的數組將是一件壞事,因為它將位於LOH中,而LOH不會在GC上進行壓縮。 不壓縮->破碎的可能性很大 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.