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


Предупреждения производительности

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

В этом подразделе

Правило

Описание

CA1800: не выполняйте лишних приведений

Повторяющиеся приведения снижают производительность, особенно если приведения выполняются в компактных операторах итераций.

CA1801: проверьте неиспользуемые параметры

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

CA1802. Используйте литералы там, где возможно

Поле объявляется статичным и доступным только для чтения (Shared и ReadOnly в Visual Basic) и инициализируется со значением, вычисляемым во время компиляции. Поскольку значение, присвоенное конечному полю, вычисляется во время компиляции, замените объявление полем const (Const в Visual Basic), чтобы значение вычислялось не во время выполнения, а во время компиляции.

CA1804: удалите неиспользуемые локальные переменные

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

CA1806: не игнорируйте результаты метода

Создается, но никогда не используется новый объект, либо вызывается метод, который создает и возвращает новую строку, и такая новая строка никогда не используется, либо метод COM или P/Invoke возвращает HRESULT или код ошибки, который никогда не используется.

CA1809: избегайте чрезмерного использования локальных переменных

Обычно для оптимизации производительности рекомендуется хранить значение не в памяти, а в регистре процессора. Это называется регистрацией значения. Чтобы повысить вероятность регистрации всех локальных переменных, следует ограничить их количество 64.

CA1810: инициализируйте статические поля ссылочного типа встроенными средствами

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

CA1811: не используйте невызываемый закрытый код

Закрытый или внутренний член (член уровня сборки) не вызывается ни объектами сборки, ни средой CLR, ни делегатом.

CA1812: не создавайте внутренние классы без экземпляров

Экземпляр типа уровня сборки не создается кодом в сборке.

CA1813: не допускайте использования распечатанных атрибутов

В библиотеке классов .NET Framework предоставляются методы для извлечения пользовательских атрибутов. По умолчанию эти методы осуществляют поиск иерархии наследования атрибутов. Если запечатать атрибут, поиск в иерархии наследования выполняться не будет, в результате чего может повыситься производительность.

CA1814: используйте ступенчатые массивы вместо многомерных

Массив массивов — это массив, элементы которого сами являются массивами. Массивы, которые составляют элементы, могут иметь различные размеры, что позволяет экономить пространство для некоторых наборов данных.

CA1815: следует переопределять равенства и равенства операторов в типах значений

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

CA1816: вызов GC.SuppressFinalize должен осуществляться правильно

Метод, являющийся реализацией Dispose, не вызывает GC.SuppressFinalize, либо метод, не являющийся реализацией Dispose, вызывает GC.SuppressFinalize, либо метод вызывает GC.SuppressFinalize и передает что-либо другое (Me в Visual Basic).

CA1819: свойства не должны возвращать массивы

Массивы, возвращаемые свойствами, не защищены от записи, даже если свойство доступно только для чтения. Чтобы защитить массив от изменений, свойство должно возвращать копию массива. Как правило, пользователи не понимают требований к производительности при вызове такого свойства.

CA1820: проверьте наличие пустых строк путем проверки длины строки

Сравнивать строки с использованием свойства String.Length или метода String.IsNullOrEmpty значительно быстрее, чем с помощью Equals.

CA1821: удаляйте пустые методы завершения

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

CA1822: помечайте члены как статические

Члены, не обращающиеся к данным экземпляра и не вызывающие методы экземпляра, можно пометить как статические (Shared в Visual Basic). Если пометить методы как статические, компилятор предоставит этим членам невиртуальные места вызова. Это обеспечивает значительное повышение производительности при работе с кодом, для которого важна высокая производительность системы.

CA1823: избегайте наличия неиспользованных закрытых полей

Обнаружены закрытые поля, доступ к которым, судя по всему, не предоставляется в сборке.

CA1824: следует помечать сборки атрибутом NeutralResourcesLanguageAttribute

Атрибут NeutralResourcesLanguage сообщает ResourceManager о языке, используемом для отображения независящих от языка и региональных параметров ресурсов для сборки. При этом повышается эффективность поиска первого загружаемого ресурса и может сократиться рабочее множество.