Я пытаюсь отладить службу Windows .net, которая проводит много времени в GC.Что именно делает gc_heap :: plan_phase?
Использование WinDbg во время собраний я обнаружил, что большая часть времени тратится на:
00000000`0279e8e0 00000642`7f5368a3 mscorwks!WKS::gc_heap::plan_phase+0x50c
00000000`0279ea90 00000642`7f94ef4e mscorwks!WKS::gc_heap::gc1+0x73
00000000`0279eae0 00000642`7f51c259 mscorwks!WKS::gc_heap::garbage_collect+0x29e
00000000`0279eb40 00000642`7f4eb56e mscorwks!WKS::GCHeap::GarbageCollectGeneration+0x199
00000000`0279ebd0 00000642`7f4ea49d mscorwks!WKS::gc_heap::try_allocate_more_space+0x38e
00000000`0279eca0 00000642`7f4e9cef mscorwks!WKS::GCHeap::Alloc+0x6d
00000000`0279ecd0 00000642`7f9b35da mscorwks!FastAllocateObject+0xaf
Узор Gen0, Gen1, коллекции Gen2 является разумным (100,10,1)
Пожалуйста, обратите внимание, что приложение работает на x64 и имеет очень большую кучу:
Gen0 10M
Gen1 26K
Gen2 4,371M
Large 3,500M
Примечание: Я знаю о великом блоге Tess Ferrandez.
Спасибо за хороший ответ. Около 5 сек. Должен ли я рассмотреть идею о том, что моя куча фрагментирована? Как GC решает сделать полную коллекцию gen2, а не только gen0. Все данные загружаются при запуске процесса и вообще не изменяются во время выполнения –