Поделиться через


Счетчики производительности в .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.

Простой

См. также

Задачи

Практическое руководство. Создание статистики производительности

Другие ресурсы

Производительность и диагностика в .NET Compact Framework