Счетчики производительности в .NET Compact Framework
Обновлен: Ноябрь 2007
Платформа .NET Compact Framework не поддерживает объекты PerformanceCounter, поскольку они не относятся к Windows CE и .NET Compact Framework. Однако .NET Compact Framework содержит набор определенных заранее счетчиков производительности, предназначенных для анализа типов нагрузки приложения на .NET Compact Framework. Счетчики не являются расширяемыми.
На устройстве можно создать файл, содержащий статистические данные производительности приложения. Описание пошаговой процедуры см. в разделе Практическое руководство. Создание статистики производительности.
Счетчики производительности полезны для понимания влияния сборки мусора и JIT-компиляции на производительность приложения. На основании этих статистических данных можно определить, где может быть выполнена оптимизация.
В файле статистики перечисляются счетчики производительности со следующими столбцами.
Столбец |
Описание |
---|---|
Общее число |
Суммирование вхождений. |
Последнее поле |
Последний элемент данных. |
N |
Число вхождений. |
Среднее |
Промежуточное значение между другими значениями. |
Мин. |
Минимальное значение. |
Макс. |
Максимальное значение. |
.Счетчики NET Compact Framework
Счетчики производительности организованы в следующие категории:
Загрузчик |
JIT-компиляция |
Универсальные |
Исключения |
Блокировки и потоки |
Взаимодействие |
Сборка мусора |
Сетевое взаимодействие |
Память |
Windows Forms |
Счетчики загрузчика
Следующие счетчики относятся к части среды CLR, ответственной за разрешение и загрузку компонентов, на которые имеются ссылки в приложении — например, сборок и классов.
Имя и короткое имя |
Описание |
Тип счетчика |
---|---|---|
Общее время выполнения программы (мс) RunTime |
Время в миллисекундах, прошедшее от момента вызова CLR. |
Вычисляемый |
Созданные домены приложения napplication domains |
Число доменов приложения, созданных в процессе приложения. |
Простой |
Выгруженные домены приложения napplication domainsUnloaded |
Число доменов приложения, выгруженных во время выполнения приложения. |
Простой |
Загруженные сборки nAssembliesloaded |
Число сборок, загруженных во всех доменах приложения. |
Простой |
Загруженные классы nClassesloaded |
Число классов, загруженных во всех доменах приложения во время выполнения приложения. |
Простой |
Загруженные методы nMethodsloaded |
Общее число методов, загруженных во всех доменах приложения во время выполнения приложения. |
Простой |
Универсальные счетчики
Универсальные счетчики — это счетчики загрузчика, относящиеся к функциональности платформы .NET Compact Framework, связанной с универсальными шаблонами. Среда CLR использует универсальные шаблоны для своих внутренних целей. Следовательно, значения в этих счетчиках можно видеть, даже если приложение явно не использует универсальные шаблоны.
Имя и короткое имя |
Описание |
Тип счетчика |
---|---|---|
Загруженные закрытые типы nInstGenericTypesLoaded |
Число уникальных универсальных типов, загруженных во всех доменах приложения. Закрытый тип — это универсальный класс, привязанный к конкретному типу данных. Например, экземпляр MyGenericType<Int32> является закрытым типом. |
Простой |
Загруженные закрытые типы для определения nMaxClosedTypes |
Максимальное число уникальных универсальных типов, созданных для конкретного определения во всех доменах приложения. Например, если приложение создает закрытые типы MyGenericType<Int32>, MyGenericType<String> и MyGenericType<Single>, число загруженных закрытых типов для определения MyGenericType<T> равно трем (3). Большое число (несколько сотен и больше) в столбце "Макс." может указывать на недостаточный размер рабочего множества с точки зрения JIT-кода и структур данных CLR. |
StaticOnly |
Загруженные открытые типы nOpenTypesLoaded |
Число открытых универсальных типов, созданных во всех доменах приложения. Открытый тип — это универсальный класс, загруженный, но не привязанный к конкретному типу данных. Открытые типы обычно создаются только в сценариях отражения. Например, загрузка экземпляра MyGenericType<T> при помощи отражения увеличивает счетчик "Загруженные открытые типы". Когда тип связывается, например, MyGenericType<String>, он становится закрытым типом и счетчик "Загруженные закрытые типы" увеличивается. Среда CLR платформы .NET Compact Framework использует отражение для внутренних целей и может выступать в качестве источника открытых типов. Например, XML-сериализация и веб-службы используют отражение для своих целей. |
Простой |
Загруженные закрытые методы nInstGenericMethodsLoaded |
Число уникальных универсальных методов, загруженных во всех доменах приложения. Закрытый метод — это универсальный метод, привязанный к конкретному типу данных. Тип, содержащий метод, может быть или может не быть универсальным типом. Например, экземпляр MyType.ProcessData<Int32>() является закрытым методом. |
Простой |
Загруженные закрытые методы для определения nMaxClosedMethods |
Максимальное число уникальных универсальных методов, созданных для конкретного определения во всех доменах приложения. Этот счетчик очень похож на счетчик "Загруженные закрытые типы для определения". Использование экземпляров MyType.ProcessData<Int32>(), MyType.ProcessData<String>() и MyType.ProcessData<Single>() приводит к созданию трех закрытых методов для определения MyType.ProcessData<T>(). Как и в случае со счетчиком "Загруженные закрытые типы для определения", большое число (несколько сотен и больше) в столбце "Макс." может указывать на недостаточный размер рабочего множества с точки зрения JIT-кода и структур данных среды CLR. |
StaticOnly |
Загруженные открытые методы nOpenMethodsLoaded |
Число открытых универсальных методов, созданных во всех доменах приложения. Открытые методы обычно создаются только в сценариях отражения. Открытый метод — это универсальный метод, загруженный, но не привязанный к конкретному типу. Среда выполнения платформы .NET Compact Framework использует отражение для внутренних целей и выступать в качестве источника открытых методов. |
Простой |
Счетчики блокировок и потоков
Следующие счетчики относятся к потокам, блокировкам, таймерам и пулам потоков. Эти счетчики могут помочь выявить проблемы производительности, связанные с потоками, предоставляя данные по использованию потока, таймеров и блокировок во время выполнения приложения.
Имя и короткое имя |
Описание |
Тип счетчика |
---|---|---|
Потоки в пуле потоков nThreads |
Число потоков в пуле потоков на настоящий момент. Этот счетчик подсчитывает потоки, запускаемые при помощи метода QueueUserWorkItem. Этот счетчик не подсчитывает потоки, запускаемые при помощи метода Start. |
MinMax |
Таймеры, находящиеся в состоянии ожидания nPendingTimers |
Число таймеров в очереди на настоящий момент. |
MinMax |
Запланированные таймеры nTimersStarted |
Число таймеров, выполняющихся или запланированных на выполнение на настоящий момент. |
Простой |
Таймеры, отложенные по ограничению пула потоков nTimersDelayed |
Число таймеров, отложенных по ограничению пула потоков. |
Простой |
Рабочие элементы, находящиеся в очереди nWorkItemsQueued |
Число рабочих элементов, находящихся в очереди пула потоков. |
Простой |
Неоспоренные вызовы Monitor.Enter nUncontestedMonitor |
Число вызовов метода Enter, которые не были оспорены. |
Простой |
Оспоренные вызовы Monitor.Enter nContestedMonitor |
Число вызовов Enter, которые были оспорены. Если поток Thread1 в многопоточном приложении удерживает блокировку, а потоку Thread2 нужно обратиться к коду, охраняемому блокировкой, счетчик "Оспоренные вызовы Monitor.Enter" увеличивается. |
Простой |
Счетчики сборки мусора
Следующие счетчики относятся к операциям сборки мусора.
Имя и короткое имя |
Описание |
Тип счетчика |
---|---|---|
Максимальное число выделенных байтов (в машинном и управляемом коде) cbPeakMemUsage |
Максимальное число байтов, используемых средой CLR, включая как управляемую, так и неуправляемую память. |
Вычисляемый |
Выделенные управляемые объекты nObjectsAllocated |
Число объектов, выделенных сборщиком мусора. |
Простой |
Неиспользуемые выделенные управляемые объекты nObjectsAllocatedNotUsed |
Число выделенных объектов, которые никогда не использовались. |
Простой |
Выделенные байты управляемой памяти cbAllocated |
Число байт, выделенных сборщиком мусора. |
Сложный |
Неиспользуемые выделенные байты управляемой памяти cbAllocatedNotUsed |
Число выделенных байт, которые никогда не использовались. |
Сложный |
Выделенные управляемые строковые объекты nStrings |
Число управляемых строковых объектов, выделенных сборщиком мусора. |
Простой |
Байты выделенных строковых объектов nStringBytes |
Число байтов строковых объектов, выделенных сборщиком мусора. |
Простой |
Сборки мусора (GC) nGC |
Число запусков сборщика мусора. |
Простой |
Байты, собранные сборщиком мусора cbGarbage |
Число байт, собранных сборщиком мусора. |
Сложный |
Используемые управляемые байты после сборки мусора cbLive |
Число байтов, выделенных под активные объекты, оставшиеся после последней сборки мусора. |
MinMax |
Общее число используемых байтов после сборки мусора cbWorkingSetMem |
Число байт памяти, как управляемой, так и неуправляемой, используемых после последней сборки мусора. |
MinMax |
Сжатия сборщика мусора nCompactions |
Число раз сжатия кучи сборщиком мусора. |
Простой |
Отмены кода nPitches |
Число раз, когда сборщик мусора отменял JIT-код. |
Простой |
Вызовы GC.Collect nInduced |
Число раз, когда приложение вызывало метод Collect. |
Простой |
Время ожидания сборщика мусора (мс) msLatency |
Общее время в миллисекундах, затраченное сборщиком мусора для сбора объектов и для сжатия кучи. Время ожидания сборщика мусора включает время сбора управляемых объектов, которые больше не принадлежат области видимости, и время сжатия кучи, производимого сборщиком мусора при необходимости. |
Сложный |
Закрепленные объекты nPinned |
Число закрепленных объектов, встретившихся во время выполнения сборки мусора. Закрепленными объектами называются объекты, местоположение которых в памяти не может быть изменено. Например, буфер памяти, используемый для связи между управляемым и неуправляемым кодом, является закрепленным объектом. Закрепленные объекты не могут переноситься сборщиком мусора во время сжатия кучи. |
Простой |
Объекты, перемещенные уплотнителем nObjMoved |
Число объектов, перемещенных сборщиком мусора во время сжатия. |
Простой |
Объекты, не перемещенные уплотнителем nObjNotMoved |
Число объектов, не перемещенных сборщиком мусора во время сжатия. Объекты могут не переноситься по ряду причин. Некоторые объекты нельзя переносить, но такие объекты редки. Другие объекты не перемещаются, поскольку они находятся в части кучи, которую не нужно сжимать. |
Простой |
Завершенные объекты nFinalizersRun |
Число объектов, для которых выполнялся метод завершения. |
Простой |
Типы упакованных значений nBoxes |
Число упакованных типов значений. |
Простой |
Счетчики памяти
Следующие счетчики относятся к кучам памяти, поддерживаемым сборщиком мусора.
Имя и короткое имя |
Описание |
Тип счетчика |
---|---|---|
Куча процесса HeapDefault |
Число байтов, используемых в настоящее время кучей по умолчанию среды CLR. Куча процесса содержит память, выделенную средой CLR, которая не входит в другие кучи, перечисленные в этой таблице. |
MinMax |
Краткосрочная куча HeapShortTerm |
Число байтов, используемых в настоящее время краткосрочной кучей среды CLR. Краткосрочная куча содержит память, выделенную средой CLR для временного использования. |
MinMax |
Куча JIT HeapJitCodeBuffer |
Число байтов, используемых кучей JIT-компилятора. Куча JIT содержит машинный код, формируемый при компиляции управляемого кода JIT-компилятором платформы .NET Compact Framework. JIT-компиляция производится при выполнении управляемого кода в первый раз или при первоначальном выполнении метода после отмены кода. |
MinMax |
Куча домена приложения HeapAppDomain |
Число байтов, используемых кучей домена приложения среды CLR. Куча домена приложения содержит динамическое представление метаданных, используемых загрузчиком сборок среды CLR. |
MinMax |
Куча сборщика мусора HeapGC |
Число байтов, используемых кучей сборщика мусора. Куча сборщика мусора содержит память, выделенную приложениями и платформой .NET Compact Framework. |
MinMax |
Счетчики JIT-компиляции
Следующие счетчики относятся к операциям JIT-компиляции.
Имя и короткое имя |
Описание |
Тип счетчика |
---|---|---|
Машинные байты, откомпилированные по требованию cbJittedNative |
Число байт машинного кода, созданного JIT-компилятором. |
Сложный |
Методы, откомпилированные по требованию nMethodsJitted |
Число методов, созданных JIT-компилятором. |
Простой |
Отмененные байты cbPitched |
Число байтов отмененного машинного кода, созданного JIT-компилятором. |
Сложный |
Отмененные методы nMethodsPitched |
Число отмененных методов, созданных JIT-компилятором. Если во время выполнения приложение не было перемещено в фоновый режим, положительное значение счетчика "Отмененные методы" указывает на то, что приложение выполнялось при недостатке памяти. |
Простой |
Время ожидания отмены методов (мс) msPitchLatency |
Общее время в миллисекундах, затраченное на отмену методов, созданных JIT-компилятором. |
Сложный |
Счетчики исключений
Следующие счетчики относятся к исключениям.
Имя и короткое имя |
Описание |
---|---|
Созданные исключения nExceptions |
Число созданных управляемых исключений. Поскольку при создании исключения затрачиваются значительные ресурсы, отслеживание числа исключений, созданных приложением, может помочь в идентификации возможных проблем проектирования. |
Счетчики взаимодействия
Следующие счетчики относятся к взаимодействию с машинным кодом.
Имя и короткое имя |
Описание |
Тип счетчика |
---|---|---|
Вызовы неуправляемого кода nPInvoke |
Число вызовов неуправляемого машинного кода из управляемого кода, не включающее внутренние вызовы неуправляемого кода среды CLR. |
Простой |
Вызовы COM, использующие vtable nComVTable |
Число вызовов неуправляемого кода из управляемого кода с использованием метода vtable COM-взаимодействия. |
Простой |
Вызовы COM с помощью интерфейса IDispatch nComIDispatch |
Число вызовов неуправляемого кода из управляемого кода с использованием интерфейса IDispatch COM-взаимодействия. |
Простой |
Сложный маршалинг nMarshal |
Число объектов, маршалированных из управляемого кода в машинный код с использованием копирования или преобразования данных. |
Простой |
Вызываемые оболочки времени выполнения cTotalRcw |
Общее число созданных вызываемых оболочек времени выполнения COM. Вызываемые оболочки времени выполнения создаются, когда управляемый код, исполняемый в среде выполнения .NET Compact Framework, выполняет вызов неуправляемого объекта COM. |
Простой |
Счетчики сетевого взаимодействия
Следующие счетчики относятся к сетевым операциям пересылки и получения.
Имя и короткое имя |
Описание |
Тип счетчика |
---|---|---|
Пересланные байты сокетов nBytesSent |
Общее число байтов, посланных через сокеты. |
Простой |
Полученные байты сокетов nBytesReceived |
Общее число байтов, полученных через сокеты. |
Простой |
Счетчики Windows Forms
Следующие счетчики относятся к пространству имен System.Windows.Forms.
Имя и короткое имя |
Описание |
Тип счетчика |
---|---|---|
Созданные элементы управления nControlsCreated |
Общее число элементов управления, созданных приложением. |
Простой |
Созданные кисти nBrushesCreated |
Общее число объектов кистей, созданных приложением. |
Простой |
Созданные перья nPensCreated |
Общее число объектов перьев, созданных приложением. |
Простой |
Созданные растровые рисунки nBitmapsCreated |
Общее число объектов растровых изображений, созданных приложением. |
Простой |
Созданные области nRegionsCreated |
Общее число объектов областей, созданных приложением. |
Простой |
Созданные шрифты nFontsCreated |
Общее число объектов шрифтов, созданных приложением. |
Простой |
Созданная графика (FromImage) nGraphicsFromImage |
Общее число графических объектов, созданных методом FromImage. |
Простой |
Созданная графика (CreateGraphics) nGraphicsCreateGraphics |
Общее число графических объектов, созданных методом CreateGraphics. |
Простой |
См. также
Задачи
Практическое руководство. Создание статистики производительности