2008-12-03 3 views
0

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

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

Только на моем сервере QA одна таблица исчезает. Таблица будет доступна для одного сценария тестирования; однако в следующий раз, когда выполняется один и тот же сценарий, одна таблица имеет значение null. Таблица, которая идет в МВД, всегда одна и та же (таблица № 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 или что-либо на отдельном сервере для моего собственного тестирования разработки.

Благодаря

ответ

4

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

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

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

1

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

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

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

  • стол был явно удален из DataSet

  • набора данных был удален из кэша и регенерированного без таблицы