Bonjour tout le monde,
j'ai le problème suivant :

j'ai créé 1 interface pour faire des statistiques sur les types de cartes que j'ai dans ma base. les informations affichées viennent de 5 tables.

Mon interface contient un combo dans lequel j'ai mis tout les types de carte (10 types). lorsque l'utilisateur choisit un type donné, les informations s'affiche dans un datagrid.

La solution que j'ai utilisée consiste à charger dans un dataset les 5 tables et le stocker dans une varibale de session:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
Private Sub Create_Dataset()
 
     Cartes_DS = New DataSet("Cartes")
     Dim query As String
     Dim Level_DV As DataView
 
     InitConnexion()
 
     'Création de la table Cartes
     query = "SELECT * from cartes order by ID_CARTE"
      Provider.FillDataSet(CommandType.Text, query, Cartes_DS, "Cartes")
 
      'Création de la table Personnes
      query = "SELECT * from personnes"
      Provider.FillDataSet(CommandType.Text, query, Cartes_DS, "Personnes")
 
      'Création de la table Porteurs           
      query = "SELECT * from PORTEUR"
      Provider.FillDataSet(CommandType.Text, query, Cartes_DS, "Porteurs")
 
      'Création de la table Supporte          
      query = "SELECT * from Supporte"
      Provider.FillDataSet(CommandType.Text, query, Cartes_DS, "Supporte")
 
     'Création de la table Type_Porteur
     query = "SELECT * from TYPE_PORTEUR"
     Provider.FillDataSet(CommandType.Text, query, Cartes_DS, "TypePorteur")
 
    'stocker le dataset ds une variable de session pour pouvoir le récupérer après
     Me.setVariableSession("Cartes_DS", Cartes_DS)
Après j'applique des filtre selon le type de carte pour afficher les informations. le problème que j'ai est que la quantité de données chargée en mémoire est énorme (plus de 9000 lignes uniquement dans la table cartes) et je fini à avoir une utilisation à 100% du CPU et 400Mo de mémoire ce qui m'affiche le message d'erreur suivant : Out of memory

la première chose à laquelle j'ai pensé pour optimiser mon code est la précision des colonnes à afficher dans mes requêtes au lieu du * :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  Private Sub Create_Dataset()
 
            Cartes_DS = New DataSet("Cartes")
            Dim query As String
            Dim Level_DV As DataView
 
            InitConnexion()
 
            'Création de la table Cartes
            query = "SELECT ID_CARTE,ID_CONSORTIUM,ID_EMETTEUR,ID_SITE,ID_CENTRE,DUREE_VIE,DATE_CONSORTIUM,DATE_ATTRIBUTION,DATE_REBUT,MOTIF_REBUT,DATE_DELIVRANCE,DATE_OPPOSITION,MOTIF_OPPOSITION,DATE_LEVEE_OPPOSITION,MOTIF_LEVEE_OPPOSITION,DATE_DESTRUCTION,MOTIF_DESTRUCTION,DATE_EMET,DATE_SITE,DATE_CENTRE,STATUT from cartes order by ID_CARTE"
            Provider.FillDataSet(CommandType.Text, query, Cartes_DS, "Cartes")
 
            'Création de la table Personnes
            query = "SELECT ID_PERSONNE,NOM,PRENOM from personnes"
            Provider.FillDataSet(CommandType.Text, query, Cartes_DS, "Personnes")
 
 
            'Création de la table Porteurs           
            query = "SELECT ID_PORTEUR,ID_PERSONNE,ID_CARTE,ID_TYPE_PORTEUR from PORTEUR"
            Provider.FillDataSet(CommandType.Text, query, Cartes_DS, "Porteurs")
 
            'Création de la table Supporte          
            query = "SELECT * from Supporte"
            Provider.FillDataSet(CommandType.Text, query, Cartes_DS, "Supporte")
 
            'Création de la table Type_Porteur
            query = "SELECT ID_TYPE_PORTEUR,LIBELLE from TYPE_PORTEUR"
            Provider.FillDataSet(CommandType.Text, query, Cartes_DS, "TypePorteur")
 
            'stocker le dataset ds une variable de session pour pouvoir le récupérer après
            Me.setVariableSession("Cartes_DS", Cartes_DS)
 
        End Sub
Sinon qu'est ce que vous me conseillez pour optimiser davantage mon code ?
y'a t-il pa d'autres méthodes bien meilleures que le chargement des données en mémoire ?
N'hésitez pas à me donner vos suggestions ou poser des questions. merci a vous tous et bon courage.