Будет ли ASP.Net удалять отдельные таблицы из кэшированного набора данных для освобождения памяти? - PullRequest
0 голосов
/ 04 декабря 2008

У меня странная спорадическая проблема.

У меня есть хранимая процедура, которая возвращает 5 маленьких таблиц (например, идентификаторы и текстовые описания для раскрывающихся списков статуса и т. Д.). Код вызывает это и помещает возвращаемый набор данных в кеш ASP.Net. Отдельные методы вызываются для извлечения отдельных таблиц из набора данных для привязки данных к элементам управления в моем веб-приложении.

Только на моем QA-сервере одна таблица исчезает. Таблица будет там для одного сценария тестирования; однако при следующем запуске этого же сценария одна таблица будет нулевой. Таблица с MIA всегда одна и та же (если быть точным, таблица № 4 из 5).

Если ASP.Net WP требуется память, может ли он удалить отдельную таблицу из кэшированного набора данных, сохранив при этом индексы набора данных?

Ниже приведен код кеширования:

public static DataSet GetDropDownLists()
{
    DataSet ds = (DataSet)HttpContext.Current.Cache["DropDownListData"];

    if (null == ds)
    {
        // - Database Connection Information Here
        ds = db.ExecuteDataSet(CommandType.StoredProcedure, "Sel_DropDownListData");

        HttpContext.Current.Cache.Add("DropDownListData", ds, null, DateTime.Now.AddMinutes(20), TimeSpan.Zero, CacheItemPriority.Normal, null);
    }

    return ds;
}

Вот пример метода, который возвращает нулевую таблицу:

public static DataTable GetStatusList()
{
    return GetDropDownLists().Tables[3]; 
}

Опять же, это происходит только на моем QA-сервере, а не тогда, когда мой локальный код подключен к базе данных QA или чему-либо на отдельном сервере для моего собственного тестирования разработки.

Спасибо

Ответы [ 2 ]

4 голосов
/ 04 декабря 2008

ASP.NET Cache будет работать только с объектами, которые вы вставляете в его список IEnumerable.

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

Что-то еще может испортить ваш набор данных. Вы уверены, что таблица № 4 должным образом загружена на вашем сервере контроля качества (т. Е. Она не пустая для начала?)

1 голос
/ 04 декабря 2008

Тот факт, что DataSet кэшируется, не имеет значения.

Таблица не может быть удалена из набора данных, кроме как в явном виде.

Вам нужно будет отладить, чтобы узнать, что происходит, логически одно из:

  • таблица была явно удалена из набора данных

  • DataSet был удален из кэша и восстановлен без таблицы

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