Как улучшить производительность сборки "мусора"?

Если я правильно понимаю, вы хотите, чтобы тип FormResult извлекал параметры базового типа из ButtonSelectControlData и ControlData. Если это так, то одним из возможных решений является создание условного типа :

type FormResult<T> = {
  [K in keyof T]: T[K] extends ControlData<infer U>
    ? U
    : never         
}
9
задан Ferruccio 4 October 2008 в 12:03
поделиться

6 ответов

Ключ должен понять, как GC CF работает на выделения. Это - простая метка-и-развертка, GC непоколений с определенными алгоритмами для того, что инициирует GC, и что вызовет уплотнение и/или делающий подачу после набора. Нет почти ничего, что можно сделать на уровне приложения для управления GC (единственный доступный метод, Собираются, и это - использование, довольно ограничен, поскольку Вы не можете вызвать уплотнение так или иначе).

Объектное повторное использование является хорошим началом, но просто проведение подсчета объектов низко является, вероятно, одним из лучших инструментов, когда все корни должны быть обойдены для любой операции набора. Хранение того короткого обхода является хорошей идеей. Если уплотнение уничтожит Вас, то предотвращение фрагментации сегмента поможет. Объекты> 64k могут быть полезными в том отношении, поскольку они получают свой собственный сегмент и рассматриваются по-другому, чем меньшие объекты.

Чтобы действительно понять, как GC CF работает, я рекомендовал бы наблюдать Вебкаст MSDN на управлении памятью CF.

12
ответ дан 4 December 2019 в 10:06
поделиться

Единственный самый важный аспект состоит в том, чтобы минимизировать уровень выделения. Каждый раз, когда объект выделяется, ему нужен GC позже. Теперь, конечно, если объект будет маленьким или недолгим, то он будет закреплен в молодом поколении (при условии, что GC поколений). Большие объекты имеют тенденцию идти непосредственно в штатную арену. Но избегание необходимости собирается, вообще еще лучше.

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

Вещью, которой нужно остерегаться, является вес стандартных библиотек и платформ. Вы переносите несколько объектов, и это заполнится довольно быстро. Помните, каждый раз, когда что-то идет на "кучу" GC, она обычно использует немного больше пространства для бухгалтерии GC. Так Ваши 1 000 указателей, выделенных индивидуально, намного больше, чем массив/вектор тех же указателей, так как последний может совместно использовать бухгалтерию GC. С другой стороны, последний, вероятно, останется в живых для намного дольше.

3
ответ дан 4 December 2019 в 10:06
поделиться

Другая опция состояла бы в том, чтобы вручную собрать мусор в течение непикового времени в Вашем приложении с помощью GC.Collect () (предполагающий, что это доступно в CF). Это могло уменьшить объекты, требуемые для очистки позже в Вашем приложении.

2
ответ дан 4 December 2019 в 10:06
поделиться

Один важный факт должен сохранить время жизни Ваших объектов максимально коротким.

2
ответ дан 4 December 2019 в 10:06
поделиться

Структура по сравнению с проблемой класса является сложной... Вы могли бы легко закончить тем, что использовали намного больше стекового пространства, например. И Вы, конечно, не хотите изменяемые структуры. Но другие точки кажутся разумными, пока Вы не изгибаете дизайн, не в форме для размещения его.

[редактирование] Еще один общий глюк является конкатенацией строк; при выполнении конкатенации в цикле используйте StringBuilder, который удалит много промежуточных строк. Могло бы случиться так, что GC занят, собирая все заброшенные версии Ваших строк?

2
ответ дан 4 December 2019 в 10:06
поделиться

Я слышал Горное шоу.NET на Роторе 2.0. Если Вы - действительно хардкор, Вы могли бы загрузить Ротор, настроить источник и использовать Ваш собственный измененный сборщик "мусора".

В любом случае тот подкаст имеет некоторую большую информацию о GC. Я настоятельно рекомендую слушание его.

0
ответ дан 4 December 2019 в 10:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: