IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

kbmmemtable EOutOfMemory aprés LoadFromDataset


Sujet :

Bases de données Delphi

  1. #1
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut kbmmemtable EOutOfMemory aprés LoadFromDataset
    Bonjour ,
    je suis entrain d'essayé d'apprendre comment utilisé le composants kbmmemtable ,
    j'ai mis un kbmMemTable sur ma fiche , et un IBTable (Composant IBX) qui est connecter a une table (plus de 30000 enregistrements) .
    mais quand j'ai essayé de charger les donnée dans le kbmMemTable via l'instruction LoadFromDataset .
    j’obtiens cette erreur.


    ---------------------------
    Notification d'une exception du débogueur
    ---------------------------
    Le projet Project1.exe a provoqué une classe d'exception EOutOfMemory avec le message 'Mémoire insuffisante'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
    ---------------------------
    OK Aide
    ---------------------------
    j'ai vu cette discussion :
    https://groups.yahoo.com/neo/groups/...ns/topics/5769

    mais pas de solution !!!!

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 958
    Points
    40 958
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    KbmemTable comme son nom l'indique, c'est une table chargée en mémoire, si le nombre d'enregistrements est trop important (ou la taille) un débordement de mémoire est toujours possible. Cela fait longtemps que je n'utilise plus KbMemtable mais il me semble me souvenir que le nombre d'enregistrements max est modifiable (dans le source ou au niveau du composant c'est ce dont je ne me souviens plus)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Merci Beaucoup Sergio pour la réponse.
    je pense qu'il faut voir coté propriété du composant , car ma RAM est de 16GO.

  4. #4
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    j'ai pas trouvé comment modifier le max des enregistrements !!!!!

    voici comment je charge les enregistrements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    KBMTable1.LoadFromDataSet(IBQuery1,[mtcpoStructure]);
    pourtant c'est motionné dans la revu du Blaise Pascal N° 44 , quelle supporte des millions d’enregistrements

    Nom : kbm.png
Affichages : 475
Taille : 118,0 Ko

  5. #5
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    L'application est en 64bits (limitation RAM 128Go il me semble) ou en 32bits (limitation 2Go)?
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  6. #6
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Citation Envoyé par Linkin Voir le message
    L'application est en 64bits (limitation RAM 128Go il me semble) ou en 32bits (limitation 2Go)?
    bonjour et merci pour la réponse.
    mon application est en 32 bits. (Delphi 7 entreprise)

  7. #7
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    mon pc a 16 GO de RAM , je suis sous windows 7 64 bits.
    j'ai essayé avec TClientDataSet + TDataSetProvider toute est bien passé.
    voici le bout du programme que j'utilise pour le KBM.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IBQuery1.Close;
    IBQuery1.Open;
    KBMTable1.LoadFromDataSet(IBQuery1,[mtcpoStructure]);
    KBMTable1.Open ;

  8. #8
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Étant donné que ton programme est en 32 bits, il utilisera maximum 2 Go de RAM. (voir même un peu moins), quelque soit ton OS et ta RAM. Cela fait partie des limites de l'adressage 32 bits.
    KBMTable1 utilise sûrement plus de place en mémoire que le ClientDataSet.

    Mais charger des millions d'enregistrements en mémoire n'est sûrement pas une bonne pratique.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  9. #9
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    bonjour ,
    j'ai envoyé un email au concepteur du composants KBM Components4Developers
    et voici leur réponse :

    Hi,

    I dont see what development environment you are using.
    An out of memory can happen of various reasons:

    - Your application uses too much memory in general. A 32 bit application typically runs out of memory when it has allocated 1.4GB using FastMM memory manager. Other memory managers may have worse or better ranges.
    - Memory fragementation. There may not be enough space in memory for a single large allocation that is requested. kbmMemTable will attempt to allocate roughly 200000 x 4 bytes as one single large allocation. As its own largest single allocation. That shouldnt be a problem.
    - Too many small allocations leading to the above memory fragmentation. kbmMemTable will allocate from 1 to n blocks of memory per record depending on the setting of the Performance property .
    If Performance is set to fast, then 1 block will be allocated (unless blobs fields exists, in which case an additional allocation will be made per not null blob field).
    If Performance is balanced or small, then each string field will allocate another block of memory per record.

    best regards
    Kim Madsen
    Components4Developers
    The high performance n-tier wizards!

Discussions similaires

  1. action APRES chargement complet ...
    Par PinGuy dans le forum Delphi
    Réponses: 7
    Dernier message: 06/07/2006, 17h16
  2. extraire 2 chiffres après virgule ?
    Par nerick dans le forum C
    Réponses: 2
    Dernier message: 13/12/2002, 17h10
  3. [] Datagrid vide après modification des propriétés
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/09/2002, 16h37
  4. [interbase]Se logger après une première installation
    Par Ultra-FX dans le forum InterBase
    Réponses: 3
    Dernier message: 13/09/2002, 11h44
  5. Comment ne pas rejouer une animation après un clic ?
    Par mmmmhhh dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 04/09/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo