PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → fChargeBuffer() et dépassement mémoire
fChargeBuffer() et dépassement mémoire
Iniciado por alexion, 15,oct. 2019 11:27 - 10 respuestas
Miembro registrado
117 mensajes
Publicado el 15,octubre 2019 - 11:27
Bonjour à tous et à toutes,

Comment faire pour éviter un dépassement mémoire et un risque de plantage lors de l'utilisation de la fonction fChargeBuffer() sur un fichier volumineux (allons dans l'abus et prenons l'exemple d'un fichier de plus de 10 GO).

Je dois mettre en mémoire buffer des fichiers potentiellement volumineux pour traitements ultérieurs mais ignore comment gérer le risque de dépassement de mémoire

Merci d'avance
Miembro registrado
352 mensajes
Publicado el 15,octubre 2019 - 11:35
Bonjour,
Rien dans la documentation qui parle d'une possible limitation dans l'utilisateur de la fonction, je dirais qu'il serait plus judicieux de faire appel au chemin des fichiers, et non par rapport au buffer
Miembro registrado
117 mensajes
Publicado el 15,octubre 2019 - 17:44
Bonjour,

en fait, dans le cadre d'un blockChain, je dois réaliser un hash sur le contenu du fichier, je suis donc dans l'obligation de mettre le contenu du fichier dans un buffer et ce, même si le fichier en question fait 200GO.

Mais merci pour la réponse apportée

J'attends donc toujours de voir si quelqu'un d'autre peut m'aider à solutionner cet épineux problème ^^
Miembro registrado
2.682 mensajes
Publicado el 15,octubre 2019 - 22:25
Ce que tu dis c'est que dois pouvoir mettre 2 l d'eau dans un verre de 20 cl sans que ca ne déborde. Tu ne vois pas comme un problème dans l'énoncé ?

--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
117 mensajes
Publicado el 16,octubre 2019 - 09:21
c'est justement pour ça que je créé ce post pour que quelqu'un puisse m'aiguiller à la résolution de ce problème.

Genre me donner un indice ou une solution permettant de mettre 2 litres d'eau dans 10 verres de 20 cl au lieu d'utiliser la fonction fChargeBuffer() qui ne permet que de mettre 20 cl d'eau dans un verre de 20 cl.

Si je ne voyais pas de problème dans l'énoncé, je ne m'ennuierais pas à vous ennuyer. C'est justement parce que je vois qu'il y a un problème que je prends la peine d'écrire ce post
Miembro registrado
4.361 mensajes
Publicado el 16,octubre 2019 - 09:55
Bonjour,
Regarde la doc de fChargeBuffer, la réponse est là. Optionnel ne signifie pas interdit.

--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 16,octubre 2019 - 10:13
Miembro registrado
2.682 mensajes
Publicado el 16,octubre 2019 - 10:14
Je ne vois pas comment en chargeant juste une partie du document tu vas pouvoir faire un hash de la totalité du document. En faisant un hash par partie pourquoi pas.

Tu récupères ton fichier par bloc de 1 Go par exemple. Tu fais le hash de cette partie. Tu récupères le bloc suivant auquel tu concatène le hash précédent et tu refais un hash,... Mais tu n'auras jamais l'équivalent du hash de toutes les données du fichier d'un coup.

Cependant ça me semble évident que ça fonctionne comme ça. Aucun système ne te chargera 200Go en mémoire pour en faire un hash.

Voici ce qu'on peut trouver sur internet:
Adding blocks to the blockchain: To add to the blockchain, miners mine for the target hash. This relies on data from the blockheader, which contains versions of the number of the block, a timestamp of the transaction and the hash of the previous block which contains the nonce.

--
Cordialement,

Philippe SAINT-BERTIN
Mensaje modificado, 16,octubre 2019 - 10:17
Miembro registrado
117 mensajes
Publicado el 16,octubre 2019 - 10:48
merci pour vos réponses, j'ai pu, grâce à vous, trouver un début de piste

et si je parlais de fichiers de 200 Go, c'était pour aller dans l'excès, je sais qu'aucun système ne peut gérer 200 Go de données en mémoire vive

Mais pour parler avec des chiffres plus réalistes, imaginons que je doive charger un fichier de 10 Go, les systèmes ayant 16 (voire carrément 32) Go de mémoire vive pourront gérer le fichier, par contre, les systèmes ne disposant que de 4 Go ne pourront pas réaliser la même opération.

D'où la présence de mon post

Mais merci encore pour vos réponses
Miembro registrado
24 mensajes
Publicado el 16,octubre 2019 - 11:38
Bonjour,

Je me suis déjà fait piégé par des dépassements de mémoire sur des chaines sans exception générée dans WinDev.
HashFichier ne peut-elle pas t'aider ?
Miembro registrado
2.682 mensajes
Publicado el 16,octubre 2019 - 12:06
Il te faut peut-être instaurer des pré-requis pour les machines devant réaliser ce genre d'opération.

RAM 32Go minimum
Système 64 bits obligatoire
Logiciel compiler en 64 bits pour la gestion mémoire
un disque SSD...

Cela va simplifier ton développement. Sinon voir mon post précédent et procéder par bloc.

--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
310 mensajes
Publicado el 16,octubre 2019 - 13:17
Bonjour,
S'îl s'agit simplement d'obtenir un hashage, pourquoi ne pas utiliser HashFichier() ?
La fonction s'occupe elle-même de gérer les fichiers volumineux avec affichage d'une jauge en option.

Bon dev.