DataView-prestaties
In dit onderwerp worden de prestatievoordelen besproken van het gebruik van de Find en FindRows methoden van de DataView klasse en het opslaan van een DataView cache in een webtoepassing.
Find and FindRows
DataView maakt een index. Een index bevat sleutels die zijn gebouwd op basis van een of meer kolommen in de tabel of weergave. Deze sleutels worden opgeslagen in een structuur waarmee de DataView rijen of rijen die zijn gekoppeld aan de sleutelwaarden snel en efficiënt kunnen worden gevonden. Bewerkingen die gebruikmaken van de index, zoals filteren en sorteren, zien aanzienlijke prestatieverbeteringen. De index voor een DataView wordt gemaakt, zowel wanneer de DataView gegevens worden gemaakt als wanneer een van de sorteer- of filtergegevens wordt gewijzigd. Het maken van een DataView en vervolgens het instellen van de sorteer- of filtergegevens zorgt ervoor dat de index ten minste twee keer wordt gebouwd: eenmaal wanneer de DataView wordt gemaakt en opnieuw wanneer een van de sorteer- of filtereigenschappen wordt gewijzigd. Zie Filteren met DataView en Sorteren met DataView voor meer informatie over filteren en sorteren DataViewmet DataView.
Als u de resultaten van een bepaalde query op de gegevens wilt retourneren, in plaats van een dynamische weergave van een subset van de gegevens te bieden, kunt u de Find of FindRows methoden van de DataVieweigenschap gebruiken in plaats van de RowFilter eigenschap in te stellen. De RowFilter eigenschap wordt het beste gebruikt in een gegevensgebonden toepassing waarbij een afhankelijk besturingselement gefilterde resultaten weergeeft. Als u de RowFilter eigenschap instelt, wordt de index voor de gegevens opnieuw opgebouwd, waardoor overhead aan uw toepassing wordt toegevoegd en de prestaties afnemen. De Find en FindRows methoden gebruiken de huidige index zonder dat de index opnieuw moet worden opgebouwd. Als u belt Find of FindRows slechts één keer, moet u de bestaande DataViewgebruiken. Als u wilt bellen Find of FindRows meerdere keren, moet u een nieuwe DataView maken om de index opnieuw op te bouwen op de kolom waarop u wilt zoeken en vervolgens de Find of FindRows methoden aanroepen. Zie Rijen zoeken voor meer informatie over de Find en FindRows methoden.
In het volgende voorbeeld wordt de Find methode gebruikt om een contactpersoon te zoeken met de achternaam '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")
In het volgende voorbeeld wordt de FindRows methode gebruikt om alle rode gekleurde producten te vinden.
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 heeft een cachemechanisme waarmee u objecten kunt opslaan waarvoor uitgebreide serverbronnen in het geheugen moeten worden gemaakt. Door deze typen resources in de cache op te slaan, kunnen de prestaties van uw toepassing aanzienlijk worden verbeterd. Caching wordt geïmplementeerd door de Cache klasse, met cache-exemplaren die privé zijn voor elke toepassing. Omdat het maken van een nieuw DataView object resource-intensief kan zijn, kunt u deze cachefunctionaliteit in webtoepassingen gebruiken, zodat de DataView pagina niet telkens opnieuw hoeft te worden opgebouwd wanneer de webpagina wordt vernieuwd.
In het volgende voorbeeld wordt de gegevens in de DataView cache opgeslagen, zodat de gegevens niet opnieuw hoeven te worden gesorteerd wanneer de pagina wordt vernieuwd.
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();