Вопрос

Я прочитал некоторые подходы к хранению состояния просмотра на сервере:

Вот один

Вот еще один

Но они какие-то сложные.Я ищу способ сохранить объект без необходимости его сериализации.Я мог бы использовать состояние сеанса, но если пользователь откроет более одного окна, объект может быть перезаписан.

Есть ли простое решение этой проблемы?

Это было полезно?

Решение

В этой ситуации я бы поместил объект в сеанс с использованием уникального ключа и привязал его к странице.Все это можно абстрагировать в свойствах класса страницы.

public string PersistanceKey
{
    get { 
        if(ViewState["PersistanceKey"] == null)
           ViewState["PersistanceKey"] = "Object" + Guid.NewGuid().ToString();

        return (string)ViewState["PersistanceKey"];
    }
}

public PersistanceObject Persistance
{
    get {
        if(Session[this.PersistanceKey] == null)
            Session[this.PersistanceKey] = new PersistanceObject();

        return (PersistanceObject)Session[this.PersistanceKey];
}

Различные ключи сеанса позволят использовать разные объекты на каждой странице.Альтернативно, вместо использования объекта Session вы можете рассмотреть возможность использования кэша приложения (объекта Cache) для автоматического удаления устаревших записей из памяти, но здесь есть свои предостережения.

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

Другие советы

Я ищу способ сохранить объект без необходимости его сериализации.

Будьте осторожны с этим.Это окажет огромное влияние на использование памяти вашим сайтом, а использование памяти часто является самым большим препятствием для масштабируемости.

Присвойте номер каждому окну, которое может открыть пользователь.Добавьте это число к сеансовому ключу.Вам также следует сохранить номер где-нибудь на странице (строка запроса или скрытый ввод), чтобы иметь возможность получить соответствующую переменную сеанса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top