Как уменьшить выполнение Сборки "мусора" Наверху

МОЕ профилирование приложения, показывающее большую Сборку "мусора" наверху. У профилировщика does'nt есть развертка в Сборку "мусора". Что я должен сделать для сокращения этих издержек?

У меня есть многие короткое проживание arraylists и некоторые долговечные, которые только умирают, когда приложение закрывается.

5
задан bsobaid 16 July 2010 в 17:57
поделиться

4 ответа

По сути, вам следует сократить работу сборщика мусора. Есть определенные «шаблоны», по которым нужно много работать.

  • Избегайте наличия множества объектов с финализаторами. Финализаторы накладывают дополнительную работу на сборщик мусора, потому что объект с финализатором нужно собирать дважды.
  • Избегайте кризиса среднего возраста. .NET GC (на рабочем столе) - это GC поколений. Когда объект переживает первую коллекцию, но вскоре после этого «умирает», сборщик мусора проделал большую работу напрасно. (копирование ко второму поколению, повторное собирание и тд). Поэтому постарайтесь оптимизировать время жизни ваших объектов таким образом, чтобы они либо умирали очень быстро, либо выживали долгое-долгое время.
  • Сократите ненужные выделения. Например, разумно используя тип значения. Или выполнение работы менее интенсивным способом памяти.

Так что в вашем случае я предполагаю, что у вас либо кризис среднего возраста с недолговечными списками. Или вы просто безумно размещаете список.

В первом случае: постарайтесь сократить срок жизни списков. Я не могу сказать, как выглядит решение для вашего приложения.

Во втором случае: старайтесь не размещать так много списков. Может быть, ты сможешь использовать правильные типы значений? Или массивы фиксированного размера? Или изменить структуру кода таким образом, чтобы не требовалось меньше списков?

В любом случае, я бы порекомендовал профилировать ваше приложение и посмотреть, сколько памяти вы выделяете и сколько можно собрать в первом поколении.

7
ответ дан 18 December 2019 в 14:41
поделиться

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

Если вы используете ArrayList с типами значений, попробуйте переключиться на использование List взамен.

5
ответ дан 18 December 2019 в 14:41
поделиться

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

1
ответ дан 18 December 2019 в 14:41
поделиться

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

Без дополнительных подробностей сложно дать хорошую рекомендацию.

0
ответ дан 18 December 2019 в 14:41
поделиться
Другие вопросы по тегам:

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