Face à de très grands ensembles de données & juste à temps de chargement

J'ai un .NET application écrite en C# (.NET 4.0). Dans cette application, nous avons à lire un grand jeu de données à partir d'un fichier et d'afficher le contenu dans une structure en grille. Donc, pour ce faire, j'ai placé un DataGridView sur la forme. Il dispose de 3 colonnes, toutes les données de la colonne vient du fichier. D'abord, le fichier avait environ 600 000 enregistrements, correspondant à 600.000 lignes dans le DataGridView.

J'ai rapidement découvert que, DataGridView s'effondre avec une telle un grand ensemble de données, j'ai donc dû basculer en Mode Virtuel. Pour ce faire, j'ai d'abord lu le fichier complètement en 3 différents tableaux (correspondant à 3 colonnes), puis le CellValueNeeded événement se déclenche, je fournis les valeurs correctes dans les tableaux.

Cependant, il peut y avoir une énorme (ÉNORME!) nombre d'enregistrements de ce fichier, comme nous l'avons rapidement découvert. Lorsque la taille est très grande, la lecture de toutes les données dans un tableau ou une Liste<>, etc, semble ne pas être faisable. Nous exécuter rapidement dans l'allocation de la mémoire des erreurs. (De mémoire exception).

Nous nous sommes plantés là, mais alors réalisé, pourquoi lire toutes les données en tableaux premier, pourquoi ne pas lire le fichier sur demande CellValueNeeded événement se déclenche? Donc, c'est ce que nous faisons maintenant: Nous ouvrir le fichier, mais ne pas lire quoi que ce soit, et que CellValueNeeded événements feu, nous avons d'abord Chercher() à la position correcte dans le fichier, et ensuite de lire les données correspondantes.

C'est le mieux que nous pouvions venir avec, mais, tout d'abord, c'est assez lent, ce qui rend l'application lente et pas convivial. Deuxièmement, nous ne pouvons pas aider mais pense qu'il doit y avoir une meilleure façon de l'accomplir. Par exemple, certains binaire éditeurs (comme HXD) sont absolument rapide pour toute la taille du fichier, donc j'aimerais savoir comment cela peut être réalisé.

Oh, et pour ajouter à nos problèmes, en mode virtuel de la DataGridView, lorsque nous avons fixé le nombre de lignes pour le nombre de lignes dans le fichier (disons 16.000.000), il faut un certain temps pour le DataGridView à même de s'initialiser. Tous les commentaires de ce "problème" serait appréciée.

Grâce

OriginalL'auteur SomethingBetter | 2011-01-26