Charger un fichier de 30 Mo dans une String... "Out Of Memory"
jockos
Messages postés321Date d'inscriptiondimanche 22 octobre 2000StatutMembreDernière intervention14 mai 2005
-
20 sept. 2002 à 14:22
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 2007
-
29 mai 2005 à 10:18
La question se trouve dans le titre...
J'ouvre un très gros fichier (environ 30 Mo) et je l'affiche dans un RtfTextBox (avec la méthode LoadFile)...
Jusqu'ici tout va bien...
J'ai besoin de mettre ce fichier dans un String pour travailler dessus (faire des calcul pour Hasher le contenu de la String)...
Bref, quand je fais l'affectation:
maString=rtftxtText.Text
ça plante...
et ça m'écris: "Out Of Memory"...
Pourquoi est-ce que Windows n'utlise pas le Swap (partie du disque dur = mémoire virtuel) pour charger ma Variable String...
Merci pour votre aide...
Jock
A voir également:
Charger un fichier de 30 Mo dans une String... "Out Of Memory"
cs_Benzoid
Messages postés9Date d'inscriptionvendredi 13 septembre 2002StatutMembreDernière intervention26 septembre 2002 20 sept. 2002 à 15:46
ca vient de l'aide de vb5, voila la copie :
Type élémentaire de données contenant des informations alphanumériques. Une variable de type String peut contenir environ 65 535 octets (64 Ko), peut être de longueur fixe ou variable et contient un caractère par octet. Les chaînes de longueur fixe ont une longueur déclarée qui est invariable. Les chaînes de longueur variable peuvent comporter 64 Ko, moins quelques octets destinés à leur stockage.
Le caractère type de déclaration du type de données String est $.
jockos
Messages postés321Date d'inscriptiondimanche 22 octobre 2000StatutMembreDernière intervention14 mai 20052 20 sept. 2002 à 16:31
J'ai VB6, et j'ai stocké des flux de plusieurs Mo dans une string... donc, la limite ne s'applique pas à 64Ko, je peux te l'assurer...
Je pense qu'une String est limité par la quantité limité et par la manière dont est géré la mémoire par l'OS... (pagging, Segmentation...).
Ce qui me fait chier, c'est qu'il utilise 0% de la mémoire virutelle... et pourtant là j'ai de la place (2048 Mo)...
Comment allouer une variable (de type String) dans la mémoire virtuel... en fait, ma question revient à cela...
C'est de la grosse merde le VB en terme de gestion de flux... ça vaut vraiment pas le C++ la dessus, mais bon, vous allez me dire que là n'est pas son rôle, mais bon, ça fait chier defois VB...
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_rene38
Messages postés1858Date d'inscriptionsamedi 29 juin 2002StatutMembreDernière intervention17 octobre 201311 21 sept. 2002 à 00:03
Aide de VB6
String, type de données
Type de données composé d'une séquence de caractères contigus interprétés en tant que caractères et non en tant que valeurs numériques. Une donnée de type String peut inclure lettres, nombres, espaces et signes de ponctuation. Le type de données String peut stocker des chaînes de longueur fixe dont la longueur est comprise entre 0 et environ 63 Ko de caractères et des chaînes dynamiques dont la longueur est comprise entre 0 et environ 2 milliards de caractères. Dans Visual Basic, le signe dollar ($) est le caractère de déclaration du type String.
jockos
Messages postés321Date d'inscriptiondimanche 22 octobre 2000StatutMembreDernière intervention14 mai 20052 21 sept. 2002 à 12:10
Merci pour l'info...
Faisons des calculs pour voir la taille maximal d'un fichier que l'on peut afficher dans une String dynamique (c'est à dire déclaré sans limitation, par exemple:
str As String 'String dynamique
str2 As String * 200 'String statique (200 octets maximum)
)
1 octet = 1 caratère en VB (tout comme en C d'ailleur)
2 milliards de caractères = 2 milliards d'octets
2 milliards d'octets = 1907 Moctets
On peut donc stocker un fichier de 1907 Mo maximum dans une String dynamique...
C'est chelou, parce que moi, le maximum que j'arrive à stocker dans une string est de l'ordre de 12 Mo environ...
Je comprend pas... et ce con de Windows ne Swap pas en mémoire virtuel (j'ai regarder la mémoire pour voir ce qui se passais)...
Est-ce que quelqu'un peut essayer de charger un gros fichier dans une String et me dire ce que cela donne...
jockos
Messages postés321Date d'inscriptiondimanche 22 octobre 2000StatutMembreDernière intervention14 mai 20052 21 sept. 2002 à 18:45
salut,
Les données du problème sont les suivantes :
Je charge le contenu d'un fichier qui fais 30 Mo (ou plus) dans un RichTextBox, avec la méthode LoadFile.
Jusqu'ici pas de problème... par contre, quand j'affecte le contenu du richTextBox à une String dynamique (c'est à dire sans limitation), pendant l'éxectuion, ça plante avec comme message "Out Of Memory".
De là, j'en déduis qu'une String ne peut pas faire plus de 30 Méga caractères (car 1 caractère = 1 octet)...
Peut importe la mémoire vive, puisque normalement, si Windows ne trouve pas 30 Mo de libre dans la Ram, il va utiliser le fichier de mémoire virtuel contenu sur le disque dur...
Moi, ça me parait bizarre qu'une String soit limité à 30 Mo...
d'après rene38, une String peut contenir 2milliards de caractères, soit 1908 Mo de données au maximum...
jockos
Messages postés321Date d'inscriptiondimanche 22 octobre 2000StatutMembreDernière intervention14 mai 20052 21 sept. 2002 à 19:32
J'ai essayé en déclarant ma Variable ave le Type Variant... rien ne change...
Je comprends pas...
Je peux chargés dans le RichTextBox un fichier de 100 Mo!!! et je ne peut pas le mettre dans une variable VB (String ou Variant)... il me dit "Out Of Memory"... j'ai envie de lui répondre:
"Et le fichier Swap, c'est de la merde, il sert à quoi si il est là!!!!!!?????"...
surfzoid
Messages postés463Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention21 avril 2010 30 déc. 2003 à 00:01
en fait g un peu le meme souci mais ds l otre sens string ver richtext = out of memory et donc au lieu d utilisé une var string ds mon projet j utilise directement lobjet richtext je sais c + long mé ca marche
:big)
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 29 mai 2005 à 10:18
Je sais ce que c'est, j'ai le même problème ! En fait il s'agit de tes cartes RAM que tu as dans l'unité centrale. Moi personellement, je n'ai que 128 MO de RAM, mais il n'y a pas que ca: Tous les programmes qui travaillent en tâche de fond utilise aussi la mémoire RAM, je sais que si j'installe Norton Antivirus ca va me bouffer la méoire RAM.
Sur ma source MicroWriter si je charge en fichier ca va mais quand je ferme une fenêtre ca fait la même erreur que toi donc il faut trouver un moyen de libérer le fichier qui est toujours en mémoire même si tu ne l'utilises pas ! Et ca, je sais pas le faire !