|
Pas assez de mémoire fChargeTexte |
Débuté par Mathieu Brousseau, 03 mar. 2015 16:09 - 21 réponses |
| |
| | | |
|
| |
Posté le 03 mars 2015 - 16:09 |
J'essai de lire un fichier XML, mais la fonction fChargeTexte pose problème, en effet elle plante à tout les coups en disant " Pas assez de mémoire " alors que le fichier ne fait que 150mo.
SI fChargeTexte( SAI_Fichier ) = "" ALORS Erreur(ErreurInfo()) FIN
Si je compile en 64bits, l'application fonctionne correctement et utilise ~700mo de RAM. En 32bits, elle plante à tous les coups.
Sachant que j'ai suffisant de mémoire vive et que le 700mo utilisé en 64bits est bien inférieurs au 1.5go maximum par processus 32bits, Est-ce possible de faire fonctionner cette fonction sous 32bits?
J'ai rencontré cette limite de 150-200mo par fichier pour les types de fichiers que j'ai testé (videos, xml, sql, ...)
Bref, est-ce qu'il y a une façon de compiler mon exécutable 32bits pour qu'il puisse utiliser les 1.5go-2go maximum théorique par processus? |
| |
| |
| | | |
|
| | |
| |
Posté le 03 mars 2015 - 18:00 |
Je crois avoir une piste de solution
En modifiant la priorité de l'application via le gestionnaire des taches de windows pour priorité élevé, l'application 32bits arrive à supporter mes gros fichiers.
J'ai essayé la fonction
ThreadPriorité(ThreadCourant() , PrioritéElevée)
Malheureusement, ThreadCourant() fonctionne uniquement pour les threads secondaires.
Quelqu'un saurait comment modifier la priorité du Thread Principale? |
| |
| |
| | | |
|
| | |
| |
Posté le 05 mars 2017 - 19:35 |
bonsoir, désolé si je ne m'exprime pas correctement en programmation, je suis débutant.... j'ai un fichier XML de 550 Mo et je n'arrive pas à l'intégrer à mon projet... j'ai testé le code avec des petits fichiers et là pas de problème. mais quand j'utilise le code sur ce gros fichier.... message d'erreur "mémoire insuffisante".... quelqu'un peut-il m'aider merci d'avance ci-dessous le code que j'utilise
MonDoc est une chaîne = fChargeTexte(SAI_FIC) XMLDocument("xml", MonDoc) XMLRecherche("xml","Piece",XMLBalise,XMLContient) TANTQUE XMLTrouve("xml")=Vrai Trace(XMLDonnée("xml","TypeRef",XMLExact)+TAB+XMLDonnée("xml","IdBord",XMLExact)+TAB+XMLDonnée("xml","IdPiece",XMLExact)+TAB+XMLDonnée("xml","ExerRattach",XMLExact)+TAB+XMLDonnée("xml","DateEmissionPiece",XMLExact)+TAB+XMLDonnée("xml","IdLigne",XMLExact)) XMLSuivant("xml") FIN XMLSuivant("xml") |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 566 messages Popularité : +222 (260 votes) |
|
Posté le 06 mars 2017 - 04:10 |
Bonjour,
Pourquoi ne pas utiliser une variable de type XMLDocument et la fonction XMLOuvre ? C’est tellement plus simple
-- Cordialement,
Philippe SAINT-BERTIN Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Posté le 06 mars 2017 - 12:04 |
Bonjour
est ce que tu teste/compile en 64 bits ?
Cordialement
-- Fabrice Harari Consultant WinDev, WebDev et WinDev Mobile International
A votre disposition : WXShowroom.com, WXReplication (open source) et maintenant WXEDM (open source)
Plus d'information sur http://fabriceharari.com
Le 3/5/2017 à 1:35 PM, Romagnol a écrit :
bonsoir, désolé si je ne m'exprime pas correctement en programmation, je suis débutant.... j'ai un fichier XML de 550 Mo et je n'arrive pas à l'intégrer à mon projet... j'ai testé le code avec des petits fichiers et là pas de problème. mais quand j'utilise le code sur ce gros fichier.... message d'erreur "mémoire insuffisante".... quelqu'un peut-il m'aider merci d'avance ci-dessous le code que j'utilise MonDoc est une chaîne = fChargeTexte(SAI_FIC) XMLDocument("xml", MonDoc) XMLRecherche("xml","Piece",XMLBalise,XMLContient) TANTQUE XMLTrouve("xml")=Vrai Trace(XMLDonnée("xml","TypeRef",XMLExact)+TAB+XMLDonnée("xml","IdBord",XMLExact)+TAB+XMLDonnée("xml","IdPiece",XMLExact)+TAB+XMLDonnée("xml","ExerRattach",XMLExact)+TAB+XMLDonnée("xml","DateEmissionPiece",XMLExact)+TAB+XMLDonnée("xml","IdLigne",XMLExact)) XMLSuivant("xml") FIN XMLSuivant("xml") |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 86 messages Popularité : +1 (1 vote) |
|
Posté le 06 mars 2017 - 19:09 |
Mathieu,
Si c'est réellement ce que tu veux faire alors Exepriorité() est ce que tu cherche !
Bon Dev, |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 07 mars 2017 - 07:11 |
hello, Philippe SB a écrit : > Pourquoi ne pas utiliser une variable de type XMLDocument et la fonction XMLOuvre ? C’est tellement plus simple
j'ai essayé d'utiliser la fonction XMLOuvre avec un fichier xml de 705 Mo (du moins avec la version 16 de windev) . Impossible d'ouvrir le fichier :
MonFluxXml est un WL.XMLDocument MonFluxXml = XMLOuvre("F:\bigdatabase\bigxml.xml", depuisFichier) SI ErreurDétectée = Vrai ALORS Erreur("Impossible d'ouvrir le fichier XML : "+ ErreurInfo()) FIN
Par contre en utilisant l'assemblage dotnet System.XML et un "flux" (stream) fichier j'ai pu lire ce fichier :
fs est un FileStream("F:\bigdatabase\bigxml.xml", FileMode.OpenOrCreate,FileAccess.Read, FileShare.Read);
MonXmlreader est un XmlReader dynamique = XmlReader.Create(fs) TANTQUE MonXmlreader.Read()
SI MonXmlreader.Name = "title" ALORS Trace(MonXmlreader.ReadString()) FIN
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Posté le 09 mars 2017 - 21:10 |
bonsoir, tout d'abord merci d'avance pour vos réponses rapides mais comme on me l'a suggérer j'ai essayé d'utiliser avec la commande xmlouvre et xmldocument, mais mon code bugg....
au secours, je commence à désespérer..
mon code : Flux est un xmlDocument Flux = XMLOuvre(SAI_FIC, depuisFichier) SI ErreurDétectée = Vrai ALORS Erreur("Impossible d'ouvrir le fichier XML") SINON XMLDocument("xml",Flux) XMLRecherche("xml","Piece",XMLBalise,XMLContient) TANTQUE XMLTrouve("xml")=Vrai Trace(XMLDonnée("xml","TypeRef",XMLExact)+TAB+XMLDonnée("xml","IdBord",XMLExact)+TAB+XMLDonnée("xml","IdPiece",XMLExact)+TAB+XMLDonnée("xml","ExerRattach",XMLExact)+TAB+XMLDonnée("xml","DateEmissionPiece",XMLExact)+TAB+XMLDonnée("xml","IdLigne",XMLExact)) XMLSuivant("xml") FIN FIN
message d'erreur :
Erreur à la ligne 7 du traitement Clic sur BTN_SansNom2. Vous avez appelé la fonction XMLDocument. Le passage du paramètre 1 a provoqué une erreur. Un élément de type 'xmlDocument' ne peut pas être converti vers le type 'chaîne ANSI'.
----- Informations techniques -----
Projet : Bestiole
Appel WL : Traitement de 'Clic sur BTN_SansNom2' (FEN_import.BTN_SansNom2), ligne 7, thread 0 Fonction 'XMLDocument', syntaxe 0
Que s'est-il passé ? Le passage du paramètre 1 a provoqué une erreur. Un élément de type 'xmlDocument' ne peut pas être converti vers le type 'chaîne ANSI'.
Code erreur : 1021 Niveau : erreur fatale (EL_FATAL)
Dump de l'erreur du module 'wd180vm.dll' (18.0.150.3). Identifiant des informations détaillées (.err) : 1021 Informations de débogage : UEL = 107 Informations supplémentaires : EIT_PILEWL : Clic sur BTN_SansNom2 (FEN_import.BTN_SansNom2), ligne 7 EIT_DATEHEURE : 09/03/2017 21:06:28
Assistance
bonne soirée et merci d'avance pour votre aide |
| |
| |
| | | |
|
| | |
| |
Posté le 09 mars 2017 - 21:12 |
bonsoir sylvain, j'ai le même problème donc je vais tester ta piste bonne soirée et merci pour ta réponse |
| |
| |
| | | |
|
| | |
| |
Posté le 09 mars 2017 - 21:17 |
bonsoir Jurassic Pork, merci pour ta réponse mais là je suis désolé, mais je n'ai pas ton niveau et j'ai rien compris... peux tu développé un peux
merci d'avance comme quoi un débutant lire et recherche...
ci-dessous tu peux voir mon nouvel essai... et oui il ne fonctionne pas...
// Chargement du flux RSS des derniers articles publiés sur le forum pcsoft.fr.windev Flux est un xmlDocument Flux = XMLOuvre(SAI_FIC, depuisFichier) SI ErreurDétectée = Vrai ALORS Erreur("Impossible d'ouvrir le fichier XML") SINON XMLDocument("xml",Flux) XMLRecherche("xml","Piece",XMLBalise,XMLContient) TANTQUE XMLTrouve("xml")=Vrai Trace(XMLDonnée("xml","TypeRef",XMLExact)+TAB+XMLDonnée("xml","IdBord",XMLExact)+TAB+XMLDonnée("xml","IdPiece",XMLExact)+TAB+XMLDonnée("xml","ExerRattach",XMLExact)+TAB+XMLDonnée("xml","DateEmissionPiece",XMLExact)+TAB+XMLDonnée("xml","IdLigne",XMLExact)) XMLSuivant("xml") FIN FIN
Ps : il bugg en ligne 7... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 566 messages Popularité : +222 (260 votes) |
|
Posté le 10 mars 2017 - 08:49 |
Bonjour,
C'est juste que tu n'utilises pas les choses de la bonne manière. XMLDocument,() crée un document XML et il attend en paramètre une chaine xml. Ta variable flux est déjà chargée avec le xml de ton fichier.
Essaye ça. Attention !!! A toi de définir l'arborescence de ton fichier xml:
Flux est un xmlDocument Flux = XMLOuvre(SAI_FIC, depuisFichier) SI ErreurDétectée = Vrai ALORS Erreur("Impossible d'ouvrir le fichier XML") SINON POUR TOUT Fils de Flux.root.Piece POUR TOUT attribut de Fils..Attribut Trace(attribut..Nom+": "+attribut..Valeur) FIN FIN FIN
-- Cordialement,
Philippe SAINT-BERTIN Géode InformatiqueMessage modifié, 10 mars 2017 - 08:50 |
| |
| |
| | | |
|
| | |
| |
Posté le 10 mars 2017 - 20:03 |
bonsoir Philippe, je te remercie beaucoup pour ton code.. mais avant de le personnalisé, je vais regarder sur la doc en ligne de PC SOFT des différentes fonctions que tu as utilisé. car oui c'est un problème actuel, mais mon but c'est que je comprends ce que tu as fait et que peut être un jour je pourrais rendre l'appareil
en tout cas un GRAND MERCI et bonne soirée.
je te tiens au courant.. (je vais essayer ce week-end) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 11 mars 2017 - 11:21 |
hello romagnol a écrit :
bonsoir Jurassic Pork, merci pour ta réponse mais là je suis désolé, mais je n'ai pas ton niveau et j'ai rien compris...
dans ton projet tu rajoutes les assemblages dotnet System et System.xml : --> menu Projet/Importer/Un assemblage .NET et dans la fenêtre liste des assemblages qui s'ouvre cocher les assemblages System et System.XML et voilà tu peux utiliser le code que j'ai mis dans mon message précédent.
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Posté le 11 mars 2017 - 21:06 |
bonsoir J.P. merci pour tes précisions sur ton code.. que j'ai essayé oui le trace s'ouvre mais par contre j'ai <\n> d'affiché... aurais-tu une idée, moi j'ai pensé que le texte n'est pas au bon format merci d'avance et bonne soirée à tous |
| |
| |
| | | |
|
| | |
| |
Posté le 12 mars 2017 - 13:08 |
bonjour Jurassic Pork, je ne vois pas comment je peux récupérer les valeurs des attributs avec ton code car, je ne n'arrive pas à récupérer le texte. le trace me restitue </n> le problème ne viendrai pas de l'encodage de mon XML qui est en "ISO-8859-15" merci d'avance |
| |
| |
| | | |
|
| | |
| |
Posté le 19 mars 2017 - 19:53 |
bonsoir PHILIPPE SB, désolé pour mon silence, mais en plus d'essayer de comprendre ton code j'ai également fait beaucoup de recherche de mon côté. ton code fonctionne parfaitement pour des petits fichiers XML par contre je dois importer un XML de 3 millions de lignes, c'est le nombre que j'obtiens avec Notepad. donc la ça bloque.. aurais tu une piste merci d'avance |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 566 messages Popularité : +222 (260 votes) |
|
Posté le 20 mars 2017 - 04:01 |
Bonjour,
tu es en 32 ou 64 bits ? et ton appli est en 32 ou 64 bits ?
-- Cordialement,
Philippe SAINT-BERTIN Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Posté le 20 mars 2017 - 10:54 |
bonjour Philippe merci d'avoir répondu, je suis en 32 bits ce que je veux c'est récupérer les balises pour les ajouter dans 5 HFSQL (une HFSQL par balise) merci d'avance |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 566 messages Popularité : +222 (260 votes) |
|
Posté le 20 mars 2017 - 12:12 |
Bonjour,
Je doute que le 32 bits soit capable de gérer une telle quantité de donnée. Soit tu passes sur du 64 bits, soit il te reste la solution de jp qui me semble être une bonne solution.
-- Cordialement,
Philippe SAINT-BERTIN Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 20 mars 2017 - 12:38 |
hello, Romagnol a écrit :
bonsoir J.P. merci pour tes précisions sur ton code.. que j'ai essayé oui le trace s'ouvre mais par contre j'ai <\n> d'affiché... aurais-tu une idée, moi j'ai pensé que le texte n'est pas au bon format merci d'avance et bonne soirée à tous c'est certainement normal si tu n'as pas modifié mon code car il ne correspond pas à ton fichier xml. Il faut faire le traitement en fonction de ce que tu veux extraire.
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Posté le 20 mars 2017 - 13:01 |
Te fatigue pas Philippe... Je lui ai déjà dit de faire ca il y 2 semaines...
Il ne veut visiblement pas...
Le 3/20/2017 à 6:12 AM, Philippe SB a écrit :
Bonjour,
Je doute que le 32 bits soit capable de gérer une telle quantité de donnée. Soit tu passes sur du 64 bits, soit il te reste la solution de jp qui me semble être une bonne solution.
-- Cordialement,
Philippe SAINT-BERTIN Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Posté le 21 mars 2017 - 00:52 |
bonsoir, merci Philippe et JURASSIC PORK pour votre aide... et votre patience. |
| |
| |
| | | |
|
| | | | |
| | |
|