Dela via


DataView-prestanda

I det här avsnittet beskrivs prestandafördelarna med att använda Find klassens metoder DataView och FindRows samt cachelagring av en DataView i ett webbprogram.

Hitta och FindRows

DataView konstruerar ett index. Ett index innehåller nycklar som skapats från en eller flera kolumner i tabellen eller vyn. Dessa nycklar lagras i en struktur som gör det möjligt DataView att hitta raden eller raderna som är associerade med nyckelvärdena snabbt och effektivt. Åtgärder som använder indexet, till exempel filtrering och sortering, ser betydande prestandaökningar. Indexet för en DataView skapas både när det DataView skapas och när någon av sorterings- eller filtreringsinformationen ändras. Om du skapar en DataView och sedan anger sorterings- eller filtreringsinformationen senare skapas indexet minst två gånger: en gång när det DataView skapas och igen när någon av sort- eller filteregenskaperna ändras. Mer information om filtrering och sortering med DataViewfinns i Filtrera med DataView och Sortering med DataView.

Om du vill returnera resultatet av en viss fråga på data, i stället för att tillhandahålla en dynamisk vy av en delmängd av data, kan du använda Find metoderna eller FindRows i DataView, i stället för att ange RowFilter egenskapen. Egenskapen RowFilter används bäst i ett databundet program där en bunden kontroll visar filtrerade resultat. RowFilter Om du ställer in egenskapen återskapas indexet för data, om du lägger till omkostnader i ditt program och minskar prestandan. Metoderna Find och FindRows använder det aktuella indexet utan att behöva återskapa indexet. Om du bara ska anropa Find eller FindRows en gång bör du använda den befintliga DataView. Om du ska anropa Find eller FindRows flera gånger bör du skapa en ny DataView för att återskapa indexet på kolumnen som du vill söka efter och sedan anropa Find metoderna eller FindRows . Mer information om metoderna och finns i Find Hitta rader.FindRows

I följande exempel används Find metoden för att hitta en kontakt med efternamnet "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")

I följande exempel används FindRows metoden för att hitta alla rödfärgade produkter.

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 har en cachelagringsmekanism som gör att du kan lagra objekt som kräver omfattande serverresurser för att skapa i minnet. Cachelagring dessa typer av resurser kan avsevärt förbättra programmets prestanda. Cachelagring implementeras av Cache klassen, med cacheinstanser som är privata för varje program. Eftersom det kan vara resurskrävande att skapa ett nytt DataView objekt kanske du vill använda den här cachelagringsfunktionen i webbprogram så att den DataView inte behöver återskapas varje gång webbsidan uppdateras.

I följande exempel DataView cachelagras den så att data inte behöver sorteras om när sidan uppdateras.

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();  

Se även