Bonjour,
Encore une petite question aux experts.
Comme justement vous êtes experts, vous savez beaucoup mieux que moi que VB 2500 Net rame lamentablement par rapport au presque défunt VB6.
Alors tant que j’en suis à réécrire presque en entier mes applis, je voulais poser juste une petite question basique :
Quelle est la façon la plus rapide de sauvegarder le contenu entier d’un DataTable sur disque dur et de recharger ensuite ce contenu à la prochaine utilisation. ?
C'est juste ma question, le reste, facultatif à lire, est pour les explications...
Le pourquoi du pourquoi :
Avec mon appli je veux pouvoir manipuler des tableaux de 9 colonnes pouvant atteindre 50000 ou 10000 lignes. Le tout est chargé en mémoire dans un DataTable lié à un DataGridView pour l’affichage et la saisie.
Sous VB6 j’avais choisi la compacité des données (stockées dans des tableaux , faute de DataTable) en définissant des types qui occupent moins de mémoire : Short, et Byte notamment, quelques Integer et Doubles aussi.
Et pour la sauvegarde je compactais parfois plusieurs données courtes sur la même variable. (Ainsi le seul String affiché dans ma grille qui ne pouvait prendre que 3 valeurs, était rangé dans 2 bits d' 1 Octet, me laissant 6 bits pour une autre variable courte). Et pour gagner encore de la place, je ne sauvegardais sur DD que les données (variables bien compactées) et non les résultats (colonnes de type Double). Au chargement, j’extrayais le contenu des variables et recalculais les résultats.
Sous VB6, avec des processeurs qui avancent, le résultat était impeccable, je chargeais un gros tableau en moins d’1 seconde et en plus, je battais des records de compacité de mes sauvegardes.
Sous VB 2005, c’est affligeant. Au point que j’ai dû ajouter un ProgressBar de chargement pour indiquer qu’on n’est pas planté…
Pour gagner un peu en vitesse de traitement j’ai mis tout ce que je pouvais en Integer et Double (avec hélas une des deux colonnes résultats passée en Décimal, pour résoudre un souci de format d’affichage et d'alignement des virgules à l'affichage non résolu autrement…)
C’est pour éviter l’extraction des variables compactées et la phase de recalcul que j’envisage, de sauvegarder le contenu intégral de ma DataTable, résultats compris, et que tant qu’à réécrire encore des lignes de code, je cherche la méthode la plus rapide.
S’il existait un moyen de sauvegarder et charger en bloc le DataTable, comme on peut semble-t-il, le faire d’un fichier texte, ce serait le rêve.
A défaut, si on peut sauver entièrement ligne par ligne avec une procédure boucle du type
Ce serait mieux que rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 For Each Row in DataTable.Rows ' méthode à appliquer Next
Mais sous quelle forme enregistrer un DataRow avec des Items de types hétérogènes (6 colonnes Integer, 1 Double, 1 String et 1 Décimal
Et comment récupérer ça ensuite ?
Bien entendu, je peux tout mettre en String, mais ça fait déjà 8 conversions pour 9 colonnes et du temps de calcul dépensé… à l'enregistrement et à la relecture et avec VB Net, vaut mieux pas trop.
Bref, si quelqu’un a une bonne idée, je prends.
Merci.
Partager