У меня есть сценарий для оптимизации того, как мое веб-приложение хранит данные в сеансе и получает их.Я должен отметить, что я использую SQL Server в качестве хранилища сеансов.
Мой сценарий заключается в том, что мне необходимо сохранить список уникальных идентификаторов, сопоставленных со строковыми значениями, в сеансе пользователя для последующего использования.Текущий код, который я унаследовал, использует List<T>
с пользовательским объектом, но я уже вижу, что какой-то словарь намного лучше для производительности.
Я проверил две идеи для альтернатив:
Сохранение Dictionary<int, string>
в сеансе.Когда мне нужно вернуть строки, я получаю словарь из сеанса один раз и могу проверить каждый идентификатор объекта словаря.
Поскольку сессия в основном похожа на сам словарь, сохранитестрока непосредственно в сеансе с использованием уникального ключа сеанса, например, Session["MyString_<id>"] = stringValue"
.Получение значения из сеанса в основном было бы обратной операцией.
Результаты моего теста показывают следующее на основе операции, которую мне нужно сделать, и использования 100 строк:
- Словарь - 4552 байта, 0,1071 секунды для выполнения операции
- Session Direct - 4441 байт, 0,0845 секунды для выполнения операции
Из этих результатов я вижу, что я экономлю некоторое пространствов сеансе (вероятно, потому что у меня нет накладных расходов на сериализацию объекта словаря), и, кажется, это быстрее при получении значений из сеанса, возможно, потому что строки быстрее десериализуются, чем объекты.
Итак, мой вопрос: лучше ли для производительности хранить множество меньших объектов в сеансе, чем один большой?Есть ли какой-то недостаток для хранения большого количества меньших объектов по сравнению с одним большим объектом, которого я не видел?