2009-08-20 8 views
1

Nous utilisons Excel pour un certain nombre de pivots/rapports ad-hoc.System.OutOfMemoryException importation de page avec un seul grand DataGrid dans Excel (correctif rapide)

Pour obtenir les données dans Excel, nous avons une page générale avec un simple DataGrid que nous lier à partir d'un DataSet/DataTable. Nous "Importons des données externes" en utilisant cette URL dans Excel.

Malheureusement, nous avons une requête qui retourne environ 100 colonnes et 40k lignes. Le serveur d'applications ne dispose que de 2 Go de RAM et la mémoire utilisée augmente de 1 Go, puis provoque une exception System.OutOfMemoryException.

J'ai l'intention de réécrire la page qui produit le DataGrid pour créer manuellement un tableau HTML en faisant une boucle dans un DataReader plutôt que de tout charger dans un DataTable. J'ai également l'intention de mettre plus de mémoire dans le serveur.

Ma question est, comment puis-je mettre cette feuille de calcul à jour en ce moment? Y at-il une solution rapide que je peux faire au DataGrid pour le laisser temporairement fonctionner? J'ai déjà désactivé ViewState pour le DataGrid.

Répondre

1

Je ne pense pas que ce soit le DataGrid qui provoque votre extention de mémoire insuffisante, mais plutôt votre DataSet. Nous avons eu le même problème avec des dizaines de milliers d'enregistrements enregistrés dans une arborescence à partir d'un DataSet, ce qui a entraîné des temps de chargement lents. La raison en est que le DataSet chargera TOUTES les données qui sont interrogées, pas seulement ce qui est vu. Il existe deux solutions pour cela: créer un chargeur juste à temps (à l'aide de DataReader) qui récupérera vos données comme vous le souhaitez (bien sûr, vous aurez alors la responsabilité de gérer quelles données sont locales ou non) ou affiner votre requête DataSet pour réduire le nombre d'enregistrements renvoyés. Je suppose que ce dernier sera plus approprié pour votre situation actuelle.