Je souhaite afficher plus de 50000 lignes dans un tableau. Quel est le meilleur contrôle à utiliser: un DataGrid ou un ListView (vue de détail)? Lequel de ces contrôles aura la meilleure performance?
Comme Hans le dit dans un commentaire sur la question initiale, ils auront tous les deux une performance catastrophique, surpassée uniquement par le mécontentement que vos utilisateurs ressentiront sûrement face à la folie de tant de lignes de données affichées en même temps.
Mais si cela est inévitable dans votre application (et que vous fournissez une très bonne fonction de recherche), vous devriez alors envisager fortement d'utiliser l'option mode virtuel , quel que soit le contrôle que vous décidez d'utiliser. . Cela signifie que vous devez fournir vos propres opérations de gestion des données, plutôt que de vous fier au contrôle pour le faire à votre place. L'avantage est que les choses vont beaucoup plus vite. Comme le documentation dit:
Le mode virtuel est conçu pour être utilisé avec de très grands magasins de données. Lorsque la propriété
VirtualMode
a la valeur true, vous créez uneDataGridView
avec un nombre défini de lignes et de colonnes, puis vous gérez l'événementCellValueNeeded
pour remplir les cellules. Le mode virtuel nécessite la mise en œuvre d'un cache de données sous-jacent pour gérer la population, la modification et la suppression des cellules DataGridView en fonction des actions de l'utilisateur. Pour plus d'informations sur l'implémentation du mode virtuel, voir Comment: implémenter le mode virtuel dans le contrôle DataGridView Windows Forms .
Ou, pour le contrôle ListView
:
La définition de la propriété
VirtualMode
sur true place laListView
en mode virtuel. En mode virtuel, la collection normaleItems
est inutilisée. Au lieu de cela, les objetsListViewItem
sont créés dynamiquement selon que le ListView les requiert.Le mode virtuel peut être utile dans de nombreuses circonstances. Si un objet
ListView
doit être rempli à partir d'une très grande collection déjà en mémoire, la création d'un objetListViewItem
pour chaque entrée peut être une perte de temps. En mode virtuel, seuls les éléments requis sont créés. Dans d'autres cas, il peut être nécessaire de recalculer fréquemment les valeurs des objetsListViewItem
, ce qui produirait des performances inacceptables. En mode virtuel, seuls les éléments requis sont calculés.Pour utiliser le mode virtuel, vous devez gérer l'événement
RetrieveVirtualItem
, qui est déclenché à chaque fois queListView
nécessite un élément. Ce gestionnaire d'événements doit créer l'objetListViewItem
qui appartient à l'index spécifié. De plus, la propriétéVirtualListSize
doit être définie sur la taille de la liste virtuelle.La gestion de l'événement
SearchForVirtualItem
permet d'effectuer une recherche en mode virtuel. Si cet événement n'est pas géré, les méthodesFindItemWithText
etFindNearestItem
renverront null.Vous pouvez gérer l'événement
CacheVirtualItems
afin de conserver un cache d'objetsListViewItem
. Si le calcul ou la recherche permettant de créer un objetListViewItem
est coûteux, la maintenance d'un cache peut améliorer les performances.Si la propriété
View
est définie sur Mosaïque, la valeur passe automatiquement à LargeIcon lorsqueVirtualMode
est défini sur true.En mode virtuel, la collection
Items
est désactivée. Tenter d'y accéder aboutit àInvalidOperationException
. Il en va de même pour la collectionCheckedItems
et la collectionSelectedItems
. Si vous souhaitez récupérer les éléments sélectionnés ou cochés, utilisez plutôt les collectionsSelectedIndices
etCheckedIndices
.
Utilisez une FastObjectListView
à partir de ObjectListView project.
50 000 lignes, c'est rien, avec le tri automatique, le filtrage, la recherche par typage et plein d'autres avantages :)
Ne pas Si vous voulez faire quelque chose comme cela, chargez les 500 premières lignes et les 100 dernières. Lorsque l'utilisateur fait défiler une centaine de lignes, charge automatiquement le prochain lot. Sous Ctrl + Fin, affichez les 100 derniers et préchargez le lot précédent au cas où l'utilisateur ferait défiler l'écran.
Jouez avec les chiffres jusqu'à ce que vous obteniez quelque chose de lisse pour l'utilisateur sans avoir à charger 50 000 lignes