Inserer rapidement des lignes d'une DataTable dans une autre [Résolu]

Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 17 janv. 2011 à 11:48 - Dernière réponse :
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 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
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
17 janv. 2011 à 15:25
3
Merci
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

Merci Polack77 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Polack77

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.