Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique décrit les avantages en matière de performances de l’utilisation Find des méthodes de FindRows la classe et de la DataView mise en cache d’une DataView application web.
Rechercher et FindRows
DataView construit un index. Il contient des clés créées à partir d'une ou plusieurs colonnes de la table ou de la vue. Ces clés sont stockées dans une structure qui permet DataView de rechercher rapidement et efficacement les lignes associées aux valeurs de clé. Les opérations qui utilisent l’index, telles que le filtrage et le tri, voient des performances significatives augmenter. L’index d’un DataView est généré à la fois lors de la DataView création et quand l’une des informations de tri ou de filtrage est modifiée. La création d'un DataView suivie de la mise en place des informations de tri ou de filtrage entraîne la génération de l'index au moins deux fois : une première fois lors de la création du DataView, puis à nouveau lorsque l'une des propriétés de tri ou de filtre est modifiée. Pour plus d’informations sur le filtrage et le tri avec DataView, consultez Filtrage avec DataView et Tri avec DataView.
Si vous souhaitez retourner les résultats d’une requête particulière sur les données, plutôt que de fournir une vue dynamique d’un sous-ensemble des données, vous pouvez utiliser les méthodes Find ou FindRows de la DataView, plutôt que de définir la propriété RowFilter. La RowFilter propriété est la meilleure utilisée dans une application liée aux données où un contrôle lié affiche des résultats filtrés. La définition de la RowFilter propriété reconstruit l’index pour les données, en ajoutant une surcharge à votre application et en réduisant les performances. Les méthodes Find et FindRows utilisent l’index actuel sans nécessiter la reconstruction de l’index. Si vous allez appeler Find ou FindRows une seule fois, vous devez utiliser l’existant DataView. Si vous allez appeler Find ou FindRows plusieurs fois, vous devez créer un nouveau DataView pour reconstruire l’index de la colonne de recherche, puis appeler les méthodes Find ou FindRows. Pour plus d’informations sur les méthodes et FindRows les Find méthodes, consultez Recherche de lignes.
L’exemple suivant utilise la Find méthode pour rechercher un contact avec le nom « 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")
L’exemple suivant utilise la FindRows méthode pour rechercher tous les produits de couleur rouge.
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 dispose d’un mécanisme de mise en cache qui vous permet de stocker des objets nécessitant des ressources serveur étendues à créer en mémoire. La mise en cache de ces types de ressources peut améliorer considérablement les performances de votre application. La mise en cache est implémentée par la Cache classe, avec des instances de cache privées pour chaque application. Étant donné que la création d’un DataView objet peut être gourmande en ressources, vous pouvez utiliser cette fonctionnalité de mise en cache dans les applications web afin que la DataView page Web ne soit pas régénérée chaque fois que la page Web est actualisée.
Dans l’exemple suivant, il DataView est mis en cache afin que les données ne doivent pas être triées à nouveau lorsque la page est actualisée.
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();