Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se describen las ventajas de rendimiento del uso de los Find métodos y FindRows de la DataView clase y del almacenamiento en caché de un DataView en una aplicación web.
Find y FindRows
DataView construye un índice. Un índice contiene claves compiladas a partir de una o varias columnas de la tabla o vista. Estas claves se almacenan en una estructura que permite DataView encontrar la fila o las filas asociadas a los valores de clave de forma rápida y eficaz. Las operaciones que usan el índice, como el filtrado y la ordenación, ven aumentos significativos del rendimiento. El índice para un DataView se construye tanto cuando se crea el DataView como cuando se modifica cualquiera de la información de ordenación o filtrado. DataView Crear y, a continuación, establecer la información de ordenación o filtrado más adelante hace que el índice se cree al menos dos veces: una vez cuando DataView se crea y, de nuevo, cuando se modifica cualquiera de las propiedades de ordenación o filtro. Para obtener más información sobre el filtrado y la ordenación con DataView, vea Filtrado con DataView y Ordenación con DataView.
Si desea devolver los resultados de una consulta específica en los datos, en lugar de proporcionar una vista dinámica de un subconjunto de los datos, puede usar los métodos Find o FindRows del DataView, en lugar de establecer la propiedad RowFilter. La RowFilter propiedad se usa mejor en una aplicación enlazada a datos donde un control enlazado muestra los resultados filtrados. Al establecer la RowFilter propiedad se vuelve a generar el índice de los datos, se agrega sobrecarga a la aplicación y se reduce el rendimiento. Los Find métodos y FindRows usan el índice actual sin necesidad de volver a generar el índice. Si va a llamar a Find o a FindRows una única vez, entonces debería utilizar el DataView existente. Si va a llamar a Find o a FindRows varias veces, debe crear un nuevo DataView para volver a generar el índice en la columna en la que desea buscar, y después llamar a los métodos Find o FindRows. Para obtener más información sobre los Find métodos y FindRows , vea Buscar filas.
En el ejemplo siguiente se usa el Find método para buscar un contacto con el apellido "Zhu".
DataTable contacts = _dataSet.Tables["Contact"];
EnumerableRowCollection<DataRow> query = from contact in contacts.AsEnumerable()
orderby contact.Field<string>("LastName")
select contact;
DataView view = query.AsDataView();
// Find a contact with the last name of Zhu.
var found = view.Find("Zhu");
Dim contacts As DataTable = dataSet.Tables("Contact")
Dim query = _
From contact In contacts.AsEnumerable() _
Order By contact.Field(Of String)("LastName") _
Select contact
Dim view As DataView = query.AsDataView()
Dim found As Integer = view.Find("Zhu")
En el ejemplo siguiente se usa el FindRows método para buscar todos los productos de color rojo.
DataTable products = _dataSet.Tables["Product"];
EnumerableRowCollection<DataRow> query = from product in products.AsEnumerable()
orderby product.Field<decimal>("ListPrice"), product.Field<string>("Color")
select product;
DataView view = query.AsDataView();
view.Sort = "Color";
var criteria = new object[] { "Red" };
DataRowView[] foundRowsView = view.FindRows(criteria);
Dim products As DataTable = dataSet.Tables("Product")
Dim query = _
From product In products.AsEnumerable() _
Order By product.Field(Of Decimal)("ListPrice"), product.Field(Of String)("Color") _
Select product
Dim view As DataView = query.AsDataView()
view.Sort = "Color"
Dim criteria As Object() = New Object() {"Red"}
Dim foundRowsView As DataRowView() = view.FindRows(criteria)
ASP.NET
ASP.NET tiene un mecanismo de almacenamiento en caché que permite almacenar objetos que requieren amplios recursos de servidor para crear en memoria. El almacenamiento en caché de estos tipos de recursos puede mejorar significativamente el rendimiento de la aplicación. La clase implementa el Cache almacenamiento en caché, con instancias de caché privadas para cada aplicación. Dado que la creación de un nuevo DataView objeto puede consumir muchos recursos, es posible que desee usar esta funcionalidad de almacenamiento en caché en aplicaciones web para que no tenga que volver a generarse cada vez que DataView se actualice la página web.
En el ejemplo siguiente, DataView se almacena en caché para evitar que los datos deban volver a ordenarse cuando se actualice la página.
If (Cache("ordersView") = Nothing) Then
Dim dataSet As New DataSet()
FillDataSet(dataSet)
Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")
Dim query = _
From order In orders.AsEnumerable() _
Where order.Field(Of Boolean)("OnlineOrderFlag") = True _
Order By order.Field(Of Decimal)("TotalDue") _
Select order
Dim view As DataView = query.AsDataView()
Cache.Insert("ordersView", view)
End If
Dim ordersView = CType(Cache("ordersView"), DataView)
GridView1.DataSource = ordersView
GridView1.DataBind()
if (Cache["ordersView"] == null)
{
// Fill the DataSet.
DataSet dataSet = FillDataSet();
DataTable orders = dataSet.Tables["SalesOrderHeader"];
EnumerableRowCollection<DataRow> query =
from order in orders.AsEnumerable()
where order.Field<bool>("OnlineOrderFlag") == true
orderby order.Field<decimal>("TotalDue")
select order;
DataView view = query.AsDataView();
Cache.Insert("ordersView", view);
}
DataView ordersView = (DataView)Cache["ordersView"];
GridView1.DataSource = ordersView;
GridView1.DataBind();