簡體   English   中英

在C#中分配一塊內存?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM