Bonjour,
Je développe un code qui lit dans une base de donnée des références d'un catalogue, je construit un objet TReference avec les données et enfin je stocke le tout dans un TStringList. Voici à quoi cela ressemble :
buildReferenceFromQuery, ne fait que remplir l'objet avec les valeurs issu de la bdd.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 i := 1; ZQuery.SQL.Add('SELECT * FROM ....'); ZQuery.Open; while not ZQuery.eof do begin reference := TReference.Create; buildReferenceFromQuery(reference, ZQuery); ListRef.AddObject( IntToStr(i), reference); inc(i); ZQuery.Next; end;
Au total j'ai 4241 ligne de résultat, mais arrivé à 4041, la ligne ListRef.AddObject( IntToStr(i), reference); plante avec le message suivant :
Mon objet reference existe bel et bien et il est correctement initialisé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Le projet ImportExport.exe a déclenché la classe d'exception EAccessViolation avec le message 'Violation d'accès à l'adresse 005AD3D8 dans le module 'ImportExport.exe'. Lecture de l'adresse 00000000'.
Est ce que quelqu'un voit pourquoi ca plante à 4041 ?
Je tiens à préciser aussi que quand je regarde la consommation mémoire du programme, elle grimpe en flèche. Avec 4040 objets le programme pèse plus de 100Mo en mémoire. Avez-vous aussi une idée sur le pourquoi de cette consommation excessive pour un simple objet reference définit ainsi :
THashTable est une classe qui permet de faire une table de hachage sur des variants.
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 TReference = class public id: Integer; code: String; libelle: THashtable; description: THashtable; ficheTechnique: THashtable; pageCatalogue: THashtable; photos: array[1..3] of string; prix: double; unite: string; dateModification: Integer; actif: Integer; orphelin: Integer; typeTarif: String; prixSurEtude: Integer; NOUVEAUTE_id: Integer; PROMOTION_id: Integer; publie: Integer; ordre: Integer; end;
Je remercie par avance tout ceux qui pourrons m'aider.
Partager