我正在處理C#應用程序,並且此應用程序面臨內存緊縮,因爲許多對象都在大對象堆中獲取內存分配。我的C#應用程序必須處理許多大文件(作爲字符串對象),因此此字符串類型對象的內存從大對象堆中一次又一次分配(因此導致LOH碎片)。在大對象堆內存中預分配一些內存
由於字符串是一個不可變對象,因此LOH中的新內存始終分配給此對象。 我的問題是,有沒有辦法,我可以在大對象堆中預先分配一些內存,並始終將相同的內存分配給字符串對象。
這裏是更詳細的內容: 正如我所提到的,我正在處理這些大文件。爲了處理,我必須將其轉換爲字符串。即使我使用了stringBuilder,也沒有什麼幫助,因爲只要我把它轉換成字符串,就可以在LOH中分配一個單獨的內存。
所以,我期待着在內存中分配一堆讓我們說100 KB的文件,並且每當我讀取一個新文件並將其轉換爲字符串時,都會分配這100 KB。
考慮使用'StringBuilder',它基本上是一個可變字符串。 – 2011-06-11 13:06:36
你爲什麼一遍又一遍地分配相同的字符串?如果您創建了一次,然後將其傳遞給所有消費者。 – Andrei 2011-06-11 13:06:37
爲什麼你認爲LOH碎片是你的問題? – svick 2011-06-11 13:12:53