Очередь финализатора растет, но управляемые кучи нет

У нас какая-то утечка, природу которой я не понимаю. Кучи Gen0/1/2 не увеличиваются в размере, однако рабочий набор увеличивается до тех пор, пока мы не получим OOM.

DebugDiag сообщает мне, что CLR.DLL владеет растущей памятью, а также сообщает мне, что у нас есть растущая очередь финализатора -100 тысяч объектов Texture2D (это приложение XNA ), которые увеличиваются со временем.. Однако нет профилировщика (dotTrace, Ants, CLR Profiler )могут найти эти объекты -, которые не отображаются в куче, и CLRProfiler утверждает, что они никогда не выделялись.

Итак, я снова смотрю в WinDbg -и вижу растущую очередь Finalizer, полную Texture2D. fReachable пуст и утверждает, что все эти объекты все равно находятся в куче.

*0:038> !finalizequeue
SyncBlocks to be cleaned up: 0
MTA Interfaces to be released: 0
STA Interfaces to be released: 0
----------------------------------
generation 0 has 1881 finalizable objects (33e365b0->33e38314)
generation 1 has 41580 finalizable objects (33e0dc00->33e365b0)
generation 2 has 685816 finalizable objects (33b70020->33e0dc00)
Ready for finalization 0 objects (33e38314->33e38314)
      MT    Count    TotalSize Class Name
......snip......
00ce67e0   726827     49424236 Microsoft.Xna.Framework.Graphics.Texture2D*

Затем я ищу эти 726 000 экземпляров, чтобы найти их владельцев. Проблема в том, что dumpheap говорит, что их всего 218. Это в значительной степени то, что я ожидаю, и то, что мне говорят управляемые профилировщики.

*0:038> !dumpheap -stat -type Microsoft.Xna.Framework.Graphics.Texture2D
total 0 objects
Statistics:
      MT    Count    TotalSize Class Name
00ce67e0      218        14824 Microsoft.Xna.Framework.Graphics.Texture2D
Total 218 objects*

Так откуда же берутся остальные элементы в очереди финализатора? Прямо сейчас я подозреваю растущую очередь финализатора для выделения памяти по мере ее роста и, следовательно, вне OOM. Как будто эти 218 элементов по какой-то причине добавляются в очередь Finalizer несколько раз.

Большое спасибо

Энди

5
задан The ZMan 21 July 2012 в 05:23
поделиться