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


Правила производительности использования в .NET Framework

Правила производительности в категории "Использование .NET Framework" определяют конкретные методы, допускающие оптимизацию, а также более общие шаблоны использования, такие как сбор мусора и конфликты блокировки, которые можно изучить на предмет наличия проблем производительности.

DA0001. Использование StringBuilder для объединений

Вызовы String.Concat(String, String) составляют значительную часть данных профилирования. Для построения строк из нескольких сегментов рекомендуется использовать StringBuilder.

DA0005: частые коллекции GC2

В процессе сборки мусора 2-го поколения было удалено относительно большое число объектов памяти .NET. Если слишком много объектов с небольшим временем существования остаются после сборки поколения 1, затраты на управление памятью могут оказаться слишком высокими.

DA0006. Переопределение Equals() для типов значений

Вызовы метода Equals или операторов равенства открытого типа значения составляют значительную часть данных профилирования. Рекомендуется внедрить более эффективный метод.

DA0007. Избегайте использования исключений для потока управления

В данных профилирование слишком большая частота вызова обработчиков исключений .NET Framework. Рекомендуется использовать другую логику потока управления для сокращения числа выдаваемых исключений.

DA0010. Затратный метод GetHashCode

Вызовы метода типа GetHashCode составляют значительную долю данных профилирования либо метод GetHashCode выделяет память. Следует упростить этот метод.

DA0011: затратное CompareTo

Метод CompareTo этого типа является затратным или выделяет память. Следует упростить метод CompareTo.

DA0012. Слишком много вызовов метода Reflection

Вызовы методов System.Reflection, таких как InvokeMember и GetMember, или методов типа, таких как InvokeMember, составляют значительную долю данных профилирования. Рекомендуется по возможности заменить эти методы ранней привязкой к методам зависимых сборок.

DA0013: интенсивное использование String.Split или String.Substring

Вызовы методов String.Split или Substring составляют значительную часть данных профилирования. Если выполняется проверка на наличие в строке подстроки, рекомендуется воспользоваться IndexOf или IndexOfAny.

DA0018. 32-битное приложение выполняется с ограничениями управляемой памяти процесса

Системные данные, собранные во время сеанса профилирования, свидетельствуют о том, что кучи памяти .NET Framework близки к максимальному для управляемых куч размеру в 32-разрядном процессе. Рассмотрим профилирование еще раз, воспользовавшись методом профилирования памяти .NET и оптимизировав использование приложением управляемых ресурсов.

DA0021. Высокая доля сборок мусора в генерации 1

В процессе сборки мусора 1-го поколения было удалено относительно большое число объектов памяти .NET. Если слишком много объектов с небольшим временем существования остаются после сборки поколения 0, затраты на управление памятью могут оказаться слишком высокими.

DA0022. Высокая доля сборок мусора в генерации 2

В процессе сборки мусора 2-го поколения было удалено большое число объектов памяти .NET. Если слишком много объектов с небольшим временем существования остаются после сборки поколения 1, затраты на управление памятью могут оказаться слишком высокими. Это правило применяется, когда частота конфликтов блокировки превышает верхнее пороговое значение правила DA0005.

DA0023. Высокое время ЦП ГК

Данные о производительности системы, собранные во время профилирования, свидетельствуют о том, что количество времени, затраченное на сборку мусора, достаточно велико по сравнению с общим временем обработки данных приложения.

DA0024. Избыточное время ЦП ГК

Данные о производительности системы, собранные во время профилирования, свидетельствуют о том, что количество времени, затраченное на сборку мусора, слишком велико по сравнению с общим временем обработки данных приложения. Это правило применяется, когда время, затраченное на сбор мусора, превышает верхнее пороговое значение правила DA0023.

DA0038. Большое число конфликтов при блокировке

Данные о производительности системы, собранные вместе с данными профилирования, свидетельствуют о достаточно большом числе конфликтов блокировки, возникающих во время выполнения приложения. Рекомендуется повторить профилирование с использованием метода профилирования параллелизма для поиска причины конфликтов.

DA0039. Очень большое число конфликтов при блокировке

Данные о производительности системы, собранные вместе с данными профилирования, свидетельствуют о слишком большом числе конфликтов блокировки, возникающих во время выполнения приложения. Рекомендуется повторить профилирование с использованием метода профилирования параллелизма для поиска причины конфликтов. Это правило применяется, когда частота конфликтов блокировки превышает верхнее пороговое значение правила DA0038.