C # Большие объекты и куча - PullRequest
9 голосов
/ 05 ноября 2011

Я немного озадачен хранением больших объектов в куче. Например, какого размера объект считается большим? Какие типы чаще рассматриваются как большие объекты? Существуют ли четкие методы фрагментации, приспособленные для управления такими объектами.

Ответы [ 2 ]

7 голосов
/ 05 ноября 2011

Эта статья содержит много подробностей, хотя вы должны знать о изменениях, поступающих и в .NET 4.5 .

Единственные типы, которые могутв конце концов на LOH находятся строки и массивы - потому что они являются единственными типами, которым в основном может быть присвоен размер во время выполнения.Я не уверен, что даже допустимо создать тип с таким количеством полей, что он окажется в LOH как единый объект - это вполне может быть, но я не могу себе представить, что это происходит в реальности.

Согласно связанной статье, ограничение в настоящее время составляет 85 000 байтов.Хотя на самом деле это деталь реализации - вам редко нужно об этом думать.

3 голосов
/ 05 ноября 2011

Общее правило: если размер объекта составляет 85000 байт или более, он считается большим и будет помещен в LOH.

По какой-то причине double[] обрабатывается по-разному, поэтому любой массивдвойников с 1000 или более элементов также идут на LOH.Я не видел никакой официальной документации для этой детали реализации, но это довольно легко проверить.

...