класс ref или value для списка из 20000 объектов - PullRequest
0 голосов
/ 14 апреля 2011

Мне нужно было бы вести список из примерно 20000 объектов класса. Этот класс будет управляемой оболочкой для c ++. Я хотел бы знать, подходят ли им класс ref или класс значений.

Мне сказали следующее за "за" и "против" w.r.t GC

В случае класса значений существует одна точка для сбора мусора по сравнению с ссылочным классом с указателем, где будет 20000 объектов для сбора мусора. Также нет финализатора или деструктора для класса значений, и, следовательно, эти объекты не попадут в очередь финализации, которая является однопоточной.

Может ли кто-нибудь рассказать о функционировании GC в обоих этих случаях для больших списков объектов.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

В ответе на вопрос, который я не смог найти в SO, @Hans Passant предложил, чтобы структура .net (класс значений C ++ Cli) не превышала 16 байт.

Так что не стесняйтесь, используйте ref class.

Вот полезная ссылка .

0 голосов
/ 14 апреля 2011

Определенно, проще всего использовать ссылочные типы - баланс «Не заставляй меня думать» действительно помогает таким образом


FWIW, я прекрасно вижу себя, выделяя буферразмером примерно 2 Мб для хранения массива объектов типа значений.

Дело в том, сколько раз они должны быть переданы.Если это просто для справочной таблицы, массив объектов значений выиграет немного производительности, и, возможно, другие преимущества [1].Это может быть полезно в шаблоне типа FlyWeight

Просто позаботьтесь о том, чтобы индексы передавались только таким объектам вокруг , иначе копирование скоро сделает жизнь более несчастной.ваше приложение

[1] например, быстрая сериализация;индексы массива находятся под контролем разработчика приложения, в отличие от идентификатора эталонного значения.Это может обеспечить очень эффективную «поверхностную» сериализацию таких элементов поиска по значению индекса, что полезно в случае использования типа marshalling (вместо фактического маршалинга полного ссылочного объекта, вы можете обратиться к нему с помощьюиспользуя «вездесущий постоянный идентификатор», который вы разработали для этой цели).

...