Массив, словарь или список в сеансе? - PullRequest
3 голосов
/ 05 февраля 2010

Какой самый эффективный способ хранения набора значений в сеансе? Я предполагаю, что это либо список / массив или словарь. По сути, когда пользователь выбирает элемент из DropDownList, значение (between 1 and N where N <= 20) отправляется обратно на сервер. Затем я хотел бы, чтобы это значение использовалось в качестве индекса (если используется массив) или ключа (если используется словарь) в сеансе. Я не хочу, чтобы значение было видно пользователю, поэтому оно не хранится в DDL. Из того, что я собираю, словари предназначены для поиска ключей. Однако, поскольку масштаб довольно мал, есть ли какие-либо издержки использования словаря, которые могут сделать его менее эффективным в этом случае? Каждое соответствующее значение уникально для пользователя, поэтому я решил использовать сеансы.

Спасибо за любой совет

Ответы [ 2 ]

2 голосов
/ 05 февраля 2010

Массивы будут лучшим вариантом для вас здесь.

Словарь может быть более масштабируемым, если вы намереваетесь добавить несколько пользовательских типов с минимальными изменениями в коде. Извлечение элемента из словаря обычно является операцией в 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

Конечно, немного медленнее, чем две другие, но обеспечивает большую масштабируемость, чем две другие структуры данных.

Но если это фиксированное количество предметов, то выбирайте Массивы. Они наиболее эффективны в этом случае.

0 голосов
/ 05 февраля 2010

Почти наверняка микрооптимизация, но абсолютная наивысшая производительность, скорее всего, будет получена из массивов. Лучше всего попробовать все ваши варианты и проверить эмпирически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...