2009-11-23 2 views
0

Как CLRProfiler используют слова, такие как статистика HEAP, OBJECTS завершена, это заставило меня подумать, что он будет почти только показывать коробку struct? Так что, если структуры - это мой источник проблем? Как я могу узнать об этом с помощью CLRProfiler?(C#) Можно ли просматривать структуру в CLRProfiler?

ответ

2

Согласно документации

«CLRProfiler является инструментом, который сосредоточен на анализе того, что происходит в куче сборщика мусора»

поэтому, естественно, вы увидите различные статистические данные, касающийся куча.

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

Я предполагаю, что если структура является источником вашей проблемы, это потому, что в вашем приложении хранится большое количество таких. Обычно это делается с использованием массивов (который является базовым типом ряда коллекций .NET). Массив является ссылочным типом, поэтому он хранится в куче. Если массив содержит структуры, значения также переходят в кучу как часть экземпляра массива.

Другими словами, если вы хотите проверять автономные структуры во время выполнения, вам необходимо найти их на стеках запущенных управляемых потоков. Честно говоря, я не очень хорошо знаком с CLRProfiler, поэтому не знаю, поддерживает ли он это. Тем не менее, вы можете проверить это с помощью отладчиков, таких как WinDbg. Если, с другой стороны, рассматриваемая структура хранится в коллекции, вам нужно найти экземпляр в куче.

Смежные вопросы