Почему фон G C приостанавливает пользовательские темы? - PullRequest
3 голосов
/ 01 апреля 2020

В настоящее время я профилирую свое приложение с помощью шкалы времени dotTrace. Я обнаружил, что в G C тратится много времени, что ожидается, но не ожидается, что я вижу, как много пользовательских потоков приостанавливаются во время сбора фона.

скриншоты профилировщика:

profiler screenshots

Из рисунка видно, что у меня два потока выполняют некоторую работу с процессором, затем возникает «фон» G C и первый поток приостанавливается чуть позже и вторая немедленно отстранена.

threads blocked

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

Я знаю, что может быть передний план, блокирующий G C Gen 0 и Gen 1 во время фона G C. Но это не тот случай, поскольку все G C относятся к Gen 2.

Я создал базовое c решение для воспроизведения на github: https://github.com/isaevdan/BackgroundGCSuspendsThreads

...