Есть ли другой способ хранения источника данных, кроме состояния просмотра? - PullRequest
2 голосов
/ 19 сентября 2011

У меня есть страница, на которой таблица данных создается программно, если данных нет в таблицах базы данных.Я должен использовать эту таблицу данных во многих событиях во время обратных передач.Таблица данных может содержать сотни записей, и на одной странице может быть несколько пользователей (конечно, с разными источниками данных для каждого пользователя).Я храню таблицу данных в состоянии просмотра, но боюсь, что эта практика сделает страницу более тяжелой.Есть ли какой-либо другой способ сохранить таблицу данных через обратную передачу. Код очень длинный, поэтому я не могу скопировать и вставить его сюда.

Использование сессии снова сделает все приложение более тяжелым ... Так что, лучше выбор по сравнению с viewstate ??

Ответы [ 5 ]

2 голосов
/ 19 сентября 2011

Вы должны использовать Session. Также можно использовать Application или Cache, но вам нужно будет сгенерировать и сохранить уникальный ключ на своей странице, чтобы избежать возможного вмешательства между запросами от разных пользователей.

1 голос
/ 19 сентября 2011

В вашем случае состояние просмотра может стать очень большим и ухудшит производительность загрузки страницы. ИМХО, лучше всего было бы пересмотреть способ обработки событий обратной передачи.

  • Используйте Caching, если более чем одному пользователю нужны одни и те же данные.
  • Использование сеанса, если данные специфичны для каждого пользователя. Но имейте в виду, что если вы находитесь в Кластерное окружение имеет некоторые подводные камни.
  • Загружать данные из базы данных каждый раз, когда пользователь отправляет сообщение обратно на сервер. Не нужно выполнять обработку состояний на сервере, но вы теряете производительность при выполнении сетевого обхода.

Для быстрого исправления я обычно сохраняю состояние просмотра на сервере. Обратитесь к этой странице, чтобы прочитать об этом ... http://aspguy.wordpress.com/2008/07/09/reducing-the-page-size-by-storing-viewstate-on-server/

0 голосов
/ 19 сентября 2011

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

В противном случае кэширование является хорошим вариантом, но вам нужно выбрать период кэширования иполитика истечения срока действия в типичных сценариях использования (а также необходимость корректной обработки сценария истечения срока действия кэша).

Еще один вариант - поместить данные во временный файл - однако в этом случае вам необходимо управлять очисткой файла и т. д..

0 голосов
/ 19 сентября 2011

Если таблица данных отличается для каждого пользователя, вы должны использовать Session, или вы могли бы использовать Cache, предполагая создание отдельного объекта Cache для каждого пользователя.

Но если таблица данныхочень большой, вероятно, не очень хорошая идея хранить его в памяти вместо прямого доступа к БД.

0 голосов
/ 19 сентября 2011

Может быть, вам нужно сохранить данные в объекте Cache

...