Charger un fichier de 30 Mo dans une String... "Out Of Memory"

Signaler
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
-
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
-
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

12 réponses

Messages postés
9
Date d'inscription
vendredi 13 septembre 2002
Statut
Membre
Dernière intervention
26 septembre 2002

Salut

Tu vas avoir un problème

Le type string peut contenir seulement 64 Ko faut que tu découpes ton fichier

Bonne chance

Benzoid
0
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
Tu es sûr de ce que tu dis...?
Parce que, je suis persuédé d'avoir remplit des variables String avec un contenu dépassant 64Ko, et de très loin...

Je doute vraiment de ce que tu viens de me dire, mais merci quand même pour ton aide...

Tu l'as eu où ce renseignement qui dit qu'un variable String peut contenir au Maximim 64Ko ?

Jock
0
Messages postés
9
Date d'inscription
vendredi 13 septembre 2002
Statut
Membre
Dernière intervention
26 septembre 2002

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 $.

Bon courage

Benzoid
0
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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+
0
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
10
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.
0
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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...

Merci beaucoup

Jock
0
Messages postés
436
Date d'inscription
dimanche 20 janvier 2002
Statut
Membre
Dernière intervention
2 février 2010
2
Bonjour,

C'est quoi les données du problème ?? à part la partie 30 MO ???
A+
0
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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...

Qu'en penses-tu?

Jockos
0
Messages postés
436
Date d'inscription
dimanche 20 janvier 2002
Statut
Membre
Dernière intervention
2 février 2010
2
1 caractère = 4 octets...

Mais pourquoi le charger dans une variable de type STRING ???

Si tu essayes de faire :
Dim MyBigString 'sans préciser le type (donc variant)

LoadResult = MyBigString

Toujours le même problème ??

Good luck :) A+
0
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
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à!!!!!!?????"...

Merci quand même...

Jockos
0
Messages postés
463
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
21 avril 2010

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)
0
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
2
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 !

Redman
0