Поделиться через


ObjectDataSource.CacheDuration Свойство

Определение

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

public:
 virtual property int CacheDuration { int get(); void set(int value); };
[System.ComponentModel.TypeConverter(typeof(System.Web.UI.DataSourceCacheDurationConverter))]
public virtual int CacheDuration { get; set; }
[<System.ComponentModel.TypeConverter(typeof(System.Web.UI.DataSourceCacheDurationConverter))>]
member this.CacheDuration : int with get, set
Public Overridable Property CacheDuration As Integer

Значение свойства

Количество секунд, кэширующих ObjectDataSource результаты SelectMethod вызова свойства. Значение по умолчанию — 0. Значение не может быть отрицательным.

Атрибуты

Примеры

В этом разделе содержатся два примера кода. В первом примере кода показано, как ObjectDataSource объект поддерживает кэширование. Второй пример кода демонстрирует, как реализовать метод оболочки, возвращающий DataSet объект для включения кэширования с ObjectDataSource объектом.

В следующем примере кода показано, как ObjectDataSource элемент управления поддерживает кэширование. Чтобы включить кэширование, необходимо реализовать метод, который извлекает данные, которые идентифицируются SelectMethod свойством, чтобы вернуть данные в качестве DataSet объекта. В этом примере EnableCaching свойству присвоено trueзначение , а CacheDurationCacheExpirationPolicy свойства заданы. Кэширует ObjectDataSource данные, возвращаемые свойством SelectMethod в течение 30 секунд.

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ Page language="c#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - C# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <asp:gridview
          id="GridView1"
          runat="server"
          datasourceid="ObjectDataSource1" />

        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          typename="Samples.AspNet.CS.EmployeeLogic"
          selectmethod="GetAllEmployeesAsDataSet"
          enablecaching="True"
          cacheduration="30"
          cacheexpirationpolicy="Absolute" />

    </form>
  </body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB" Assembly="Samples.AspNet.VB" %>
<%@ Page language="vb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - VB Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <asp:gridview
          id="GridView1"
          runat="server"
          datasourceid="ObjectDataSource1" />

        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          typename="Samples.AspNet.VB.EmployeeLogic"
          selectmethod="GetAllEmployeesAsDataSet"
          enablecaching="True"
          cacheduration="30"
          cacheexpirationpolicy="Absolute" />

    </form>
  </body>
</html>

В следующем примере кода показано, как реализовать метод оболочки, возвращающий DataSet объект для включения кэширования с ObjectDataSource помощью элемента управления. В базовой EmployeeLogic реализации класса GetAllEmployees метод возвращает ArrayList объект. Вместо полного рефакторинга объекта для работы со ObjectDataSource страницей веб-форм добавляется метод GetAllEmployeesAsDataSet оболочки NorthwindEmployee , который возвращает набор данных в виде DataSet.

Этот пример кода является частью более крупного примера, предоставленного для ObjectDataSource класса.

//
// To support basic filtering, the employees cannot
// be returned as an array of objects, rather as a
// DataSet of the raw data values.
public static DataSet GetAllEmployeesAsDataSet () {
  ICollection employees = GetAllEmployees();

  DataSet ds = new DataSet("Table");

  // Create the schema of the DataTable.
  DataTable dt = new DataTable();
  DataColumn dc;
  dc = new DataColumn("FirstName", typeof(string)); dt.Columns.Add(dc);
  dc = new DataColumn("LastName",  typeof(string)); dt.Columns.Add(dc);
  dc = new DataColumn("Title",     typeof(string)); dt.Columns.Add(dc);
  dc = new DataColumn("Courtesy",  typeof(string)); dt.Columns.Add(dc);
  dc = new DataColumn("Supervisor",typeof(Int32));  dt.Columns.Add(dc);

  // Add rows to the DataTable.
  IEnumerator emplEnum = employees.GetEnumerator();
  DataRow row;
  NorthwindEmployee ne;
  while (emplEnum.MoveNext()) {
    ne = emplEnum.Current as NorthwindEmployee;
    row = dt.NewRow();
    row["FirstName"]  = ne.FirstName;
    row["LastName"]   = ne.LastName;
    row["Title"]      = ne.Title;
    row["Courtesy"]   = ne.Courtesy;
    row["Supervisor"] = ne.Supervisor;
    dt.Rows.Add(row);
  }
  // Add the complete DataTable to the DataSet.
  ds.Tables.Add(dt);

  return ds;
}
' To support basic filtering, the employees cannot
' be returned as an array of objects, rather as a
' DataSet of the raw data values.
Public Shared Function GetAllEmployeesAsDataSet() As DataSet
   Dim employees As ICollection = GetAllEmployees()

   Dim ds As New DataSet("Table")

   ' Create the schema of the DataTable.
   Dim dt As New DataTable()
   Dim dc As DataColumn
   dc = New DataColumn("FirstName", GetType(String))
   dt.Columns.Add(dc)
   dc = New DataColumn("LastName", GetType(String))
   dt.Columns.Add(dc)
   dc = New DataColumn("Title", GetType(String))
   dt.Columns.Add(dc)
   dc = New DataColumn("Courtesy", GetType(String))
   dt.Columns.Add(dc)
   dc = New DataColumn("Supervisor", GetType(Int32))
   dt.Columns.Add(dc)

   ' Add rows to the DataTable.
   Dim emplEnum As IEnumerator = employees.GetEnumerator()
   Dim row As DataRow
   Dim ne As NorthwindEmployee
   While emplEnum.MoveNext()
      ne = CType(emplEnum.Current, NorthwindEmployee)
      row = dt.NewRow()
      row("FirstName") = ne.FirstName
      row("LastName") = ne.LastName
      row("Title") = ne.Title
      row("Courtesy") = ne.Courtesy
      row("Supervisor") = ne.Supervisor
      dt.Rows.Add(row)
   End While
   ' Add the complete DataTable to the DataSet.
   ds.Tables.Add(dt)

   Return ds
End Function 'GetAllEmployeesAsDataSet

Комментарии

Элемент управления поддерживает кэширование ObjectDataSource данных. Хотя данные кэшируются, вызовы Select метода извлекают данные из кэша, а не из бизнес-объекта, с которым работает этот ObjectDataSource метод. По истечении срока действия Select кэша метод извлекает данные из бизнес-объекта, а затем кэширует данные снова.

Элемент ObjectDataSource управления автоматически кэширует данные, если EnableCaching свойство задано true , а CacheDuration свойство имеет значение больше 0, что указывает количество секунд, в течение которых кэш сохраняет данные перед удалением записи кэша. Значение 0 указывает бесконечно длинный кэш.

Кэш регулируется сочетанием длительности и CacheExpirationPolicy параметра. CacheExpirationPolicy Если для свойства задано Absolute значение, ObjectDataSource данные кэшируются при первом вызове Select метода и хранятся в памяти в течение, по крайней мере, времени, указанного свойствомCacheDuration. Данные могут быть освобождены до времени длительности, если требуется память. Затем кэш обновляется во время следующего Select вызова метода. CacheExpirationPolicy Если для свойства задано Sliding значение, элемент управления версиями данных кэширует данные при первом вызове Select метода, но сбрасывает период времени, для которого он хранит кэш при каждом последующем вызове Select метода. Срок действия кэша истекает, если нет действия в течение времени, равного CacheDuration свойству с момента последнего вызова Select метода.

Применяется к

См. также раздел