Массивы будут лучшим вариантом для вас здесь.
Словарь может быть более масштабируемым, если вы намереваетесь добавить несколько пользовательских типов с минимальными изменениями в коде. Извлечение элемента из словаря обычно является операцией в 1 переход. Но единственные издержки, связанные с использованием словаря, - это сериализация. Сериализация будет задействована только в том случае, если вы используете SQLServer или StateServer для хранения своих сеансов.
Я провел несколько тестов, где использовал BinaryFormatter для сериализации массива int, List и Dictionary.
Я сериализовал каждый объект 100000 раз.
Каждая структура данных содержит 20 значений.
Вот результаты:
int[] took 1955 ms to serialize
List<int> took 4135 ms to serialize
Dictionary<int,int> took 27917ms to serialize
Так что будьте осторожны при использовании Словаря, когда используется сериализация.
========================================
Чтобы поддержать мой аргумент о том, что извлечение элемента из словаря является достаточно эффективным, я также провел некоторый сравнительный анализ, где я сохранил 20 элементов в каждой структуре данных (которую я использовал выше) и выбрал элементы 10000000 раз. Вот результаты
int[] took 136 ms to serialize
List<int> took 184 ms to serialize
Dictionary<int,int> took 877 ms to serialize
Конечно, немного медленнее, чем две другие, но обеспечивает большую масштабируемость, чем две другие структуры данных.
Но если это фиксированное количество предметов, то выбирайте Массивы. Они наиболее эффективны в этом случае.