Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
17 janv. 2011 à 11:48
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
17 janv. 2011 à 15:25
Bonjour (je ne poste pas dans le thème base de donnée car ma question est indépendante d'un SGBD ),
Je crée actuellement une lecture de base de donnée (un SELECT) en multithreading.
En résumer j'ai 3 thread : - Un pour l'affichage (dont je ne parlerais plus)
- Un pour lire page par page une table (qui ne me pose pas de problème)
- Un pour remplir une DataTable (houla aie bobo, c'est la que sa coince )
Mon objectif étant d'optimiser un maximum les lectures de base de données et de ne pas bloquer l'affichage.
Pour comprendre ce que je fait : Mon thread de lecture lit une table page par page et insère les lignes lut dans une pile (objet Queue)
Mon thread d'insertion récupère ces lignes de la pile et les insèrent dans une datatable.
La méthode que j'utilise pour insérer les lignes est :
Dim LignesLut As System.Data.DataRowCollection
SyncLock PileLigne
LignesLut = PileLigne.Dequeue
End SyncLock
For Each Ligne As DataRow In LignesLut
SyncLock Table
Table.Rows.Add(Ligne.ItemArray)
End SyncLock
Next
Sauf que c'est TRÈS TRÈS
lent
Existe t'il une méthode plus rapide pour faire ce genre de chose ?
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
A voir également:
Inserer rapidement des lignes d'une DataTable dans une autre
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 17 janv. 2011 à 15:25
Trouvé ,
Il faut simplement utiliser la propriété Merge :
SyncLock PileTable
Table.Merge(PileTable.Dequeue)
End SyncLock
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo