CA1814: используйте ступенчатые массивы вместо многомерных
Свойство | Значение |
---|---|
Идентификатор правила | CA1814 |
Заголовок | Используйте массивы массивов вместо многомерных массивов |
Категория | Производительность |
Исправление является критическим или не критическим | Критическое |
Включен по умолчанию в .NET 8 | No |
Причина
Элемент объявляется как многомерный массив, что может привести к напрасному расходу пространства для некоторых наборов данных.
Описание правила
В многомерном массивекаждый элемент в каждом измерении имеет тот же фиксированный размер, что и другие элементы в этом измерении. В массиве массивов внутренние массивы могут быть разного размера. При использовании только пространства, необходимого для данного массива, не происходит напрасной траты пространства. Правило CA1814 рекомендует переключаться на массив массивов для экономии памяти.
Устранение нарушений
Чтобы устранить нарушение этого правила, измените многомерный массив на массив массивов.
Когда лучше отключить предупреждения
Можно отключить предупреждение из этого правила, если в многомерном массиве не тратится место.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1814
// The code that's violating the rule is on this line.
#pragma warning restore CA1814
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1814.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Пример
В следующем примере показаны объявления массива массивов и многомерного массива.
Imports System
Public Class ArrayHolder
Private jaggedArray As Integer()() = {New Integer() {1, 2, 3, 4}, _
New Integer() {5, 6, 7}, _
New Integer() {8}, _
New Integer() {9}}
Private multiDimArray As Integer(,) = {{1, 2, 3, 4}, _
{5, 6, 7, 0}, _
{8, 0, 0, 0}, _
{9, 0, 0, 0}}
End Class
public class ArrayHolder
{
int[][] jaggedArray = { new int[] {1,2,3,4},
new int[] {5,6,7},
new int[] {8},
new int[] {9}
};
int[,] multiDimArray = {{1,2,3,4},
{5,6,7,0},
{8,0,0,0},
{9,0,0,0}
};
}