2009-09-01 6 views
0

Disons que j'ai 2 tables dans une base de données, chacune avec 100 000 lignes de détail et 10 000 lignes de lignes dans les 5 colonnes principales, correctement indexé et lié. Je veux avoir des gridviews imbriquées maître/détail. Quelle est l'architecture la plus rapide que je pourrais concevoir dans .net pour faire ceci? Le plus grand ensemble de résultats sur le maître pourrait être dans les milliers (généralement dans les dizaines cependant) et le détail par enregistrements pourrait être dans les centaines (généralement dans les chiffres simples si). J'aimerais pouvoir afficher tous les masters si possible.Avec 2 gridviews imbriquées avec de grands ensembles de données, quel est le moyen le plus optimisé pour implémenter

Répondre

2

La ligne du bas: lier à DataReaders, utiliser Repeaters au lieu de GridViews et désactiver ViewState.

Le design que vous proposez sera très dur pour vos utilisateurs (des milliers d'enregistrements, par exemple), mais vous le savez probablement déjà. Si cela est juste pour l'affichage et que vous voulez l'architecture absolue la plus rapide pour Asp.Net, vous devez obtenir un IDataReader pour chaque segment de données (maître et enfant), trié de sorte que vous puissiez correspondre manuellement aux enregistrements enfants en lisant les deux résultats d'une manière avant-seulement. (Voir Scott Mitchell Why I don't Use DataSets in my ASP.NET Applications pour quelques détails sur DataReader performances - tant que vous n'êtes pas optimisez prématurément, il est tout à fait un bon conseil.)

Au lieu d'utiliser un GridView, j'utiliser un Repeater qui a moins de frais généraux et vous permet d'écrire du code HTML plus compact (pour une charge utile plus petite pour le client): lier le maître IDataReader à ce répéteur. (Je ne suis pas sûr que vous vouliez dire le contrôle GridView, ou tout simplement une grille conceptuelle - l'architecture de base serait le même pour un GridView)

Ensuite, ajoutez un gestionnaire à la Repeater.ItemDataBound qui vérifie si l'enregistrement en cours du lecteur de données enfant allumettes. Si c'est le cas, affichez manuellement vos données détaillées pour cette fiche.

Enfin, vous devez également désactiver ViewState, au moins pour Repeater (de préférence pour autant de pages que possible), à ​​nouveau pour que la charge utile HTML soit plus petite. Si vous êtes totalement engagé à imbriquer GridView s, en particulier en utilisant un GridView pour afficher les données détaillées, cela nuira à la performance d'une manière ou d'une autre, car vous devrez effectuer beaucoup plus d'appels à la base de données (pour obtenir des jeux de résultats discrets, vous pouvez vous lier à) ou vous devrez masser les données de détail dans un conteneur intermédiaire.

Questions connexes