Desempenho de um DataView

Este tópico aborda os benefícios de desempenho de usar Find e métodos de FindRows de DataView classe, e para armazenar em cachê DataView em um aplicativo da Web.

Localize e FindRows

DataView constrói um índice. Um índice contém chaves criadas de uma ou mais colunas da tabela ou exibição. Essas chaves são armazenadas em uma estrutura que permite DataView para encontrar a linha ou linhas associada com os valores da chave rapidamente e com eficiência. As operações que usam o índice, como filtragem e classificação, têm significantes aumentos de desempenho. O índice de um DataView é compilado quando DataView é criado e quando qualquer informação de classificação ou de filtragem é modificada. Criar DataView e então defina a classificação ou informações de filtragem causam posteriormente o índice a ser compilado pelo menos duas vezes: uma vez que quando DataView é criado, e novamente quando algumas de tipo ou propriedades de filtragem são alteradas. Para obter mais informações sobre filtragem e classificação com DataView, consulte Filtragem com DataView e Classificação com DataView.

Se você quiser retornar os resultados de uma consulta específica nos dados, ao contrário de fornecer uma exibição dinâmica de um subconjunto dos dados, você poderá usar os métodos Find ou FindRows de DataView, em vez de definir a propriedade RowFilter. A propriedade RowFilter é melhor usada em um aplicativo associado a dados onde um controle de associação exibe resultados filtrados. Definir a propriedade RowFilter reconstrói o índice para os dados, adicionando a sobrecarga ao seu aplicativo e diminuindo o desempenho. Os métodos Find e FindRows usam o índice atual sem exigir que o índice seja reconstruído. Se você chamar Find ou FindRows apenas uma vez, deverá usar o DataView existente. Se você chamar Find ou FindRows várias vezes, deverá criar um novo DataView para recriar o índice na coluna em que você deseja pesquisar e, em seguida, chamar os métodos Find ou FindRows. Para obter mais informações sobre os métodos Find e FindRows, consulte Localizar linhas.

O exemplo a seguir usa o método de Find para localizar um contato com o sobrenome “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")

O exemplo a seguir usa o método de FindRows para localizar todos os produtos colorido vermelho.

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

O ASP.NET tem um mecanismo de cachê que permite que você armazene os objetos que exigem recursos abrangentes de servidor criar na memória. Armazenar em cachê esses tipos de recursos pode melhorar significativamente o desempenho do seu aplicativo. Caching é implementado pela classe de Cache , com instâncias de cache que são particulares para cada aplicativo. Como criar um novo objeto de DataView pode ser recurso intensivo, você pode querer usar essa funcionalidade de cachê em aplicativos da Web para que DataView não tem que ser reconstruído todas as vezes na página da Web é atualizado.

No exemplo a seguir, DataView é armazenado em cachê de modo que os dados não precisem ser recorridos quando a página é atualizada.

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

Confira também