Udostępnij przez


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

Zobacz też