Wydajność widoku danych
W tym temacie omówiono zalety wydajności użycia Find metod DataView i FindRows klasy oraz buforowania DataView elementu w aplikacji internetowej.
Znajdź i znajdźrows
DataView tworzy indeks. Indeks zawiera klucze utworzone na podstawie co najmniej jednej kolumny w tabeli lub widoku. Te klucze są przechowywane w strukturze, która umożliwia DataView szybkie i wydajne znajdowanie wierszy lub wierszy skojarzonych z wartościami kluczy. Operacje korzystające z indeksu, takie jak filtrowanie i sortowanie, widzą znaczne wzrosty wydajności. Indeks dla elementu DataView jest tworzony zarówno podczas DataView tworzenia, jak i gdy dowolny z informacji sortowania lub filtrowania jest modyfikowany. Utworzenie elementu DataView , a następnie ustawienie informacji sortowania lub filtrowania powoduje, że indeks zostanie skompilowany co najmniej dwa razy: raz po utworzeniu DataView , a następnie ponownie po zmodyfikowaniu dowolnych właściwości sortowania lub filtru. Aby uzyskać więcej informacji na temat filtrowania i sortowania za pomocą DataViewmetody , zobacz Filtrowanie za pomocą widoku Danych i Sortowanie za pomocą elementu DataView.
Jeśli chcesz zwrócić wyniki określonego zapytania dotyczącego danych, w przeciwieństwie do zapewnienia dynamicznego widoku podzestawu danych, możesz użyć Find metod DataViewlub FindRows , a nie ustawiania RowFilter właściwości . Właściwość RowFilter jest najlepiej używana w aplikacji powiązanej z danymi, w której powiązana kontrolka wyświetla przefiltrowane wyniki. RowFilter Ustawienie właściwości ponownie kompiluje indeks dla danych, dodając obciążenie do aplikacji i zmniejszając wydajność. Metody Find i FindRows używają bieżącego indeksu bez konieczności odbudowy indeksu. Jeśli zamierzasz zadzwonić Find lub FindRows tylko raz, należy użyć istniejącego DataViewelementu . Jeśli zamierzasz wywołać Find metodę lub FindRows wielokrotnie, utwórz nową DataView , aby ponownie skompilować indeks w kolumnie, w której chcesz wyszukać, a następnie wywołać Find metody lub FindRows . Aby uzyskać więcej informacji na temat Find metod i FindRows , zobacz Znajdowanie wierszy.
W poniższym przykładzie użyto Find metody w celu znalezienia kontaktu z nazwiskiem "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")
W poniższym przykładzie użyto FindRows metody w celu znalezienia wszystkich produktów w kolorze czerwonym.
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 ma mechanizm buforowania, który umożliwia przechowywanie obiektów wymagających rozbudowanych zasobów serwera do utworzenia w pamięci. Buforowanie te typy zasobów mogą znacznie poprawić wydajność aplikacji. Buforowanie jest implementowany przez klasę Cache z wystąpieniami pamięci podręcznej, które są prywatne dla każdej aplikacji. Ponieważ tworzenie nowego DataView obiektu może intensywnie obciążać zasoby, możesz chcieć użyć tej funkcji buforowania w aplikacjach sieci Web, aby DataView nie trzeba było odbudowywane za każdym razem, gdy strona sieci Web zostanie odświeżona.
W poniższym przykładzie element DataView jest buforowany tak, aby dane nie musiały być ponownie sortowane po odświeżeniu strony.
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();