Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème avec mémoire Vive [ Archives Visual Basic / Fichier / Disque ] (YahnIck)

jeudi 19 septembre 2002 à 13:46:09 | Problème avec mémoire Vive

YahnIck

avec VB6 je fait une création de fichier textes d'une taille de 40 Mo environs.

avec une boucle For le prog crée un fichier texte à chaque tour de boucle.

mon problème c'est que au fur et à mesur que le programme crée les fichiers texte, la quantité de mémoire vive disponible diminue aussi. et au bout de 20 fichiers créés je suis à 100% d'utilisation de la mémoire vive. ( j'ai + de 700 Mo ram)
je comprend pas pourquoi alors que les fichiers sont créés sur le disque dur???

est ce quelqu'un pourrait m'expliquer pourquoi et comment résoudre le problème (récuperer la mémoire)

merci de votre attention

a+

yann

jeudi 19 septembre 2002 à 14:01:30 | Re : Problème avec mémoire Vive

imer

Peut être cela pourra t'aider:

Si, pour créer tes fichiers textes, tu ouvres le fichier (avec l'instructuion Open ou la méthode OpenTextFile de l'objet FileSystemObject, par exemple), alors pense à le refermer avant d'en ouvrir un autre.



-------------------------------
Réponse au message :
-------------------------------

avec VB6 je fait une création de fichier textes d'une taille de 40 Mo environs.

avec une boucle For le prog crée un fichier texte à chaque tour de boucle.

mon problème c'est que au fur et à mesur que le programme crée les fichiers texte, la quantité de mémoire vive disponible diminue aussi. et au bout de 20 fichiers créés je suis à 100% d'utilisation de la mémoire vive. ( j'ai + de 700 Mo ram)
je comprend pas pourquoi alors que les fichiers sont créés sur le disque dur???

est ce quelqu'un pourrait m'expliquer pourquoi et comment résoudre le problème (récuperer la mémoire)

merci de votre attention

a+

yann

jeudi 19 septembre 2002 à 14:19:36 | Re : Problème avec mémoire Vive

YahnIck

Je ferme le fichier open avec l'instruction Close #

est ce la bonne méthode ou y'en a t il une autre ?



-------------------------------
Réponse au message :
-------------------------------

Peut être cela pourra t'aider:

Si, pour créer tes fichiers textes, tu ouvres le fichier (avec l'instructuion Open ou la méthode OpenTextFile de l'objet FileSystemObject, par exemple), alors pense à le refermer avant d'en ouvrir un autre.



-------------------------------
Réponse au message :
-------------------------------

avec VB6 je fait une création de fichier textes d'une taille de 40 Mo environs.

avec une boucle For le prog crée un fichier texte à chaque tour de boucle.

mon problème c'est que au fur et à mesur que le programme crée les fichiers texte, la quantité de mémoire vive disponible diminue aussi. et au bout de 20 fichiers créés je suis à 100% d'utilisation de la mémoire vive. ( j'ai + de 700 Mo ram)
je comprend pas pourquoi alors que les fichiers sont créés sur le disque dur???

est ce quelqu'un pourrait m'expliquer pourquoi et comment résoudre le problème (récuperer la mémoire)

merci de votre attention

a+

yann


jeudi 19 septembre 2002 à 14:49:24 | Re : Problème avec mémoire Vive

imer

'Le code suivant crée 35 fichiers textes de 40 Mo environ
'Pendant l'exécution, dans le gestionnaire des taches, l'UC est à 100% et la mémoire reste stable -> 112000K environ/256 Mo Ram)

Dim FileNumber As Long
Dim i_ligne As Long
Dim j_fichier As Long

For j_fichier = 1 To 30
FileNumber = FreeFile
Open "c:\test" & CStr(j_fichier) & ".txt" For Output As #FileNumber
For i_ligne = 0 To 3500000
Print #FileNumber, "azertyuiop"
Next i_ligne
Close #FileNumber
Next j_fichier


-------------------------------
Réponse au message :
-------------------------------

Je ferme le fichier open avec l'instruction Close #

est ce la bonne méthode ou y'en a t il une autre ?



-------------------------------
Réponse au message :
-------------------------------

Peut être cela pourra t'aider:

Si, pour créer tes fichiers textes, tu ouvres le fichier (avec l'instructuion Open ou la méthode OpenTextFile de l'objet FileSystemObject, par exemple), alors pense à le refermer avant d'en ouvrir un autre.



-------------------------------
Réponse au message :
-------------------------------

avec VB6 je fait une création de fichier textes d'une taille de 40 Mo environs.

avec une boucle For le prog crée un fichier texte à chaque tour de boucle.

mon problème c'est que au fur et à mesur que le programme crée les fichiers texte, la quantité de mémoire vive disponible diminue aussi. et au bout de 20 fichiers créés je suis à 100% d'utilisation de la mémoire vive. ( j'ai + de 700 Mo ram)
je comprend pas pourquoi alors que les fichiers sont créés sur le disque dur???

est ce quelqu'un pourrait m'expliquer pourquoi et comment résoudre le problème (récuperer la mémoire)

merci de votre attention

a+

yann



jeudi 19 septembre 2002 à 15:25:52 | Re : Problème avec mémoire Vive

YahnIck

Aie

je viens d'essayer le code
et
bien aux 17 eme fichier la mémoire est pleine

où ai je fais l'erreur?
j'ai fait un copier coller du code

cela viens de mon système d'exploitation ? j'ai windows 98



-------------------------------
Réponse au message :
-------------------------------

'Le code suivant crée 35 fichiers textes de 40 Mo environ
'Pendant l'exécution, dans le gestionnaire des taches, l'UC est à 100% et la mémoire reste stable -> 112000K environ/256 Mo Ram)

Dim FileNumber As Long
Dim i_ligne As Long
Dim j_fichier As Long

For j_fichier = 1 To 30
FileNumber = FreeFile
Open "c:\test" & CStr(j_fichier) & ".txt" For Output As #FileNumber
For i_ligne = 0 To 3500000
Print #FileNumber, "azertyuiop"
Next i_ligne
Close #FileNumber
Next j_fichier


-------------------------------
Réponse au message :
-------------------------------

Je ferme le fichier open avec l'instruction Close #

est ce la bonne méthode ou y'en a t il une autre ?



-------------------------------
Réponse au message :
-------------------------------

Peut être cela pourra t'aider:

Si, pour créer tes fichiers textes, tu ouvres le fichier (avec l'instructuion Open ou la méthode OpenTextFile de l'objet FileSystemObject, par exemple), alors pense à le refermer avant d'en ouvrir un autre.



-------------------------------
Réponse au message :
-------------------------------

avec VB6 je fait une création de fichier textes d'une taille de 40 Mo environs.

avec une boucle For le prog crée un fichier texte à chaque tour de boucle.

mon problème c'est que au fur et à mesur que le programme crée les fichiers texte, la quantité de mémoire vive disponible diminue aussi. et au bout de 20 fichiers créés je suis à 100% d'utilisation de la mémoire vive. ( j'ai + de 700 Mo ram)
je comprend pas pourquoi alors que les fichiers sont créés sur le disque dur???

est ce quelqu'un pourrait m'expliquer pourquoi et comment résoudre le problème (récuperer la mémoire)

merci de votre attention

a+

yann




jeudi 19 septembre 2002 à 16:01:50 | Re : Problème avec mémoire Vive

imer

Aïe en effet.
J'ai Windows 2000 et aucun problème.
Il ne doit pas gérer l'écriture sur disque de la même façon.
Essaie avec FileSystemObject (cf MSDN) sinon tente ce code pour voir. Il ferme et ouvre le fichier au bout d'un certain nombre de lignes écrites. A toi de faire varier "Nb_EcritureMax". C'est plus long à l'exécution

Dim FileNumber As Long
Dim i_ligne As Long
Dim j_fichier As Long
Dim Nb_Ecriture As Long
Dim Nb_EcritureMax As Long

Nb_EcritureMax = 1000

For j_fichier = 1 To 30

'Suppression du fichier s'il existe
If Dir("c:\test" & CStr(j_fichier) & ".txt") <> "" Then
Kill "c:\test" & CStr(j_fichier) & ".txt"
End If

Nb_Ecriture = 0
FileNumber = FreeFile

'écriture dans le fichier
Open "c:\test" & CStr(j_fichier) & ".txt" For Append As #FileNumber

For i_ligne = 0 To 3500000
Print #FileNumber, "azertyuiop"
Nb_Ecriture = Nb_Ecriture + 1

'libération de la mémoire en fermant et ré-ouvrant le fichier
If Nb_Ecriture > Nb_EcritureMax Then
Nb_Ecriture = 0
Close #FileNumber
FileNumber = FreeFile
Open "c:\test" & CStr(j_fichier) & ".txt" For Append As #FileNumber
End If

Next i_ligne

Close #FileNumber

'fichier suivant
Next j_fichier
-------------------------------
Réponse au message :
-------------------------------

Aie

je viens d'essayer le code
et
bien aux 17 eme fichier la mémoire est pleine

où ai je fais l'erreur?
j'ai fait un copier coller du code

cela viens de mon système d'exploitation ? j'ai windows 98



-------------------------------
Réponse au message :
-------------------------------

'Le code suivant crée 35 fichiers textes de 40 Mo environ
'Pendant l'exécution, dans le gestionnaire des taches, l'UC est à 100% et la mémoire reste stable -> 112000K environ/256 Mo Ram)

Dim FileNumber As Long
Dim i_ligne As Long
Dim j_fichier As Long

For j_fichier = 1 To 30
FileNumber = FreeFile
Open "c:\test" & CStr(j_fichier) & ".txt" For Output As #FileNumber
For i_ligne = 0 To 3500000
Print #FileNumber, "azertyuiop"
Next i_ligne
Close #FileNumber
Next j_fichier


-------------------------------
Réponse au message :
-------------------------------

Je ferme le fichier open avec l'instruction Close #

est ce la bonne méthode ou y'en a t il une autre ?



-------------------------------
Réponse au message :
-------------------------------

Peut être cela pourra t'aider:

Si, pour créer tes fichiers textes, tu ouvres le fichier (avec l'instructuion Open ou la méthode OpenTextFile de l'objet FileSystemObject, par exemple), alors pense à le refermer avant d'en ouvrir un autre.



-------------------------------
Réponse au message :
-------------------------------

avec VB6 je fait une création de fichier textes d'une taille de 40 Mo environs.

avec une boucle For le prog crée un fichier texte à chaque tour de boucle.

mon problème c'est que au fur et à mesur que le programme crée les fichiers texte, la quantité de mémoire vive disponible diminue aussi. et au bout de 20 fichiers créés je suis à 100% d'utilisation de la mémoire vive. ( j'ai + de 700 Mo ram)
je comprend pas pourquoi alors que les fichiers sont créés sur le disque dur???

est ce quelqu'un pourrait m'expliquer pourquoi et comment résoudre le problème (récuperer la mémoire)

merci de votre attention

a+

yann





jeudi 19 septembre 2002 à 16:36:18 | Re : Problème avec mémoire Vive

jockos

Quand on ouvre un fichier et que l'on travail dessus, de même pour les EXE, ou n'importe quel process, c'est dans la mèmoire vive que ça se passe. (heuresement d'ailleur, parce que quand on voit la différence entre les temps d'accès disque et ceux de la mèmoire vive, on comprend mieux pourquoi ça marche comme ça)...

Bref, tout ça pour dire, que quand on charge un fichier en mémoire vive (c'est exactement ce que fais la commande Open), on occupe une place mémoire statique, un peu comme un tableau...

Un fichier de 40 Mo ne tiendra pas forcément dans la mémoire vive, car il faut qu'il y ait 40 Mo de libre à la suite...
Mais ce que je ne comprend pas, c'est pourquoi est-ce que ce bon vieux Windows ne Swap pas sur le disque dur quand il n'a pas la place nécessaire en Ram... (c'est ce qui se passe quand on ouvre un très très gros fichier . doc avec Word par exemple... on entend le disque dur qui rame.... bzzzz et d'ailleur, le Pc rame aussi, parce que la Swap est très gourmand en ressource...).

Moi j'ai le même blème, quand j'ouvre un fichier texte de plus de 10 Mo pour le chargé dans un TextBox, ça plante... (bon, j'ai que 128 Mo de Ram, mais quand même!!! merde.... lol)

Donc la question, c'est pourquoi est-ce qu'il ne swap pas ce prog VB, est-ce qu'il faut lui dire, parce que ça a pas l'air de se faire par défaut et pourtant, je croyais que c'était Windaube qui gérait la mémoire vive...

En tout cas laisse tomber l'objet FileSystem, ça bopuffe encore plus de ressource, c'est un ActiveX, contrairement à Open, Close qui sont des méthodes de classes internes à VB.

Jockos


-------------------------------
Réponse au message :
-------------------------------

Aïe en effet.
J'ai Windows 2000 et aucun problème.
Il ne doit pas gérer l'écriture sur disque de la même façon.
Essaie avec FileSystemObject (cf MSDN) sinon tente ce code pour voir. Il ferme et ouvre le fichier au bout d'un certain nombre de lignes écrites. A toi de faire varier "Nb_EcritureMax". C'est plus long à l'exécution

Dim FileNumber As Long
Dim i_ligne As Long
Dim j_fichier As Long
Dim Nb_Ecriture As Long
Dim Nb_EcritureMax As Long

Nb_EcritureMax = 1000

For j_fichier = 1 To 30

'Suppression du fichier s'il existe
If Dir("c:\test" & CStr(j_fichier) & ".txt") <> "" Then
Kill "c:\test" & CStr(j_fichier) & ".txt"
End If

Nb_Ecriture = 0
FileNumber = FreeFile

'écriture dans le fichier
Open "c:\test" & CStr(j_fichier) & ".txt" For Append As #FileNumber

For i_ligne = 0 To 3500000
Print #FileNumber, "azertyuiop"
Nb_Ecriture = Nb_Ecriture + 1

'libération de la mémoire en fermant et ré-ouvrant le fichier
If Nb_Ecriture > Nb_EcritureMax Then
Nb_Ecriture = 0
Close #FileNumber
FileNumber = FreeFile
Open "c:\test" & CStr(j_fichier) & ".txt" For Append As #FileNumber
End If

Next i_ligne

Close #FileNumber

'fichier suivant
Next j_fichier
-------------------------------
Réponse au message :
-------------------------------

Aie

je viens d'essayer le code
et
bien aux 17 eme fichier la mémoire est pleine

où ai je fais l'erreur?
j'ai fait un copier coller du code

cela viens de mon système d'exploitation ? j'ai windows 98



-------------------------------
Réponse au message :
-------------------------------

'Le code suivant crée 35 fichiers textes de 40 Mo environ
'Pendant l'exécution, dans le gestionnaire des taches, l'UC est à 100% et la mémoire reste stable -> 112000K environ/256 Mo Ram)

Dim FileNumber As Long
Dim i_ligne As Long
Dim j_fichier As Long

For j_fichier = 1 To 30
FileNumber = FreeFile
Open "c:\test" & CStr(j_fichier) & ".txt" For Output As #FileNumber
For i_ligne = 0 To 3500000
Print #FileNumber, "azertyuiop"
Next i_ligne
Close #FileNumber
Next j_fichier


-------------------------------
Réponse au message :
-------------------------------

Je ferme le fichier open avec l'instruction Close #

est ce la bonne méthode ou y'en a t il une autre ?



-------------------------------
Réponse au message :
-------------------------------

Peut être cela pourra t'aider:

Si, pour créer tes fichiers textes, tu ouvres le fichier (avec l'instructuion Open ou la méthode OpenTextFile de l'objet FileSystemObject, par exemple), alors pense à le refermer avant d'en ouvrir un autre.



-------------------------------
Réponse au message :
-------------------------------

avec VB6 je fait une création de fichier textes d'une taille de 40 Mo environs.

avec une boucle For le prog crée un fichier texte à chaque tour de boucle.

mon problème c'est que au fur et à mesur que le programme crée les fichiers texte, la quantité de mémoire vive disponible diminue aussi. et au bout de 20 fichiers créés je suis à 100% d'utilisation de la mémoire vive. ( j'ai + de 700 Mo ram)
je comprend pas pourquoi alors que les fichiers sont créés sur le disque dur???

est ce quelqu'un pourrait m'expliquer pourquoi et comment résoudre le problème (récuperer la mémoire)

merci de votre attention

a+

yann






jeudi 19 septembre 2002 à 16:47:21 | Re : Problème avec mémoire Vive

YahnIck

En faite mon problème n'est pas la création des fichiers, car m^me arrivé à 100% de la mémoire il continue à les créer. il doit certainement utiliser le disque dur.

bon problème c'est que dès que les fichiers ont été créer, le prog enchaine sur une autre tache qui gère des images, or pour traiter des images il me faut de la memoire et lorsque la tache commence ben la memoire ne c'est pas vidé suite à la fin de la tache précédente (la création des fichiers) et là ça plante!!



-------------------------------
Réponse au message :
-------------------------------

Quand on ouvre un fichier et que l'on travail dessus, de même pour les EXE, ou n'importe quel process, c'est dans la mèmoire vive que ça se passe. (heuresement d'ailleur, parce que quand on voit la différence entre les temps d'accès disque et ceux de la mèmoire vive, on comprend mieux pourquoi ça marche comme ça)...

Bref, tout ça pour dire, que quand on charge un fichier en mémoire vive (c'est exactement ce que fais la commande Open), on occupe une place mémoire statique, un peu comme un tableau...

Un fichier de 40 Mo ne tiendra pas forcément dans la mémoire vive, car il faut qu'il y ait 40 Mo de libre à la suite...
Mais ce que je ne comprend pas, c'est pourquoi est-ce que ce bon vieux Windows ne Swap pas sur le disque dur quand il n'a pas la place nécessaire en Ram... (c'est ce qui se passe quand on ouvre un très très gros fichier . doc avec Word par exemple... on entend le disque dur qui rame.... bzzzz et d'ailleur, le Pc rame aussi, parce que la Swap est très gourmand en ressource...).

Moi j'ai le même blème, quand j'ouvre un fichier texte de plus de 10 Mo pour le chargé dans un TextBox, ça plante... (bon, j'ai que 128 Mo de Ram, mais quand même!!! merde.... lol)

Donc la question, c'est pourquoi est-ce qu'il ne swap pas ce prog VB, est-ce qu'il faut lui dire, parce que ça a pas l'air de se faire par défaut et pourtant, je croyais que c'était Windaube qui gérait la mémoire vive...

En tout cas laisse tomber l'objet FileSystem, ça bopuffe encore plus de ressource, c'est un ActiveX, contrairement à Open, Close qui sont des méthodes de classes internes à VB.

Jockos


-------------------------------
Réponse au message :
-------------------------------

Aïe en effet.
J'ai Windows 2000 et aucun problème.
Il ne doit pas gérer l'écriture sur disque de la même façon.
Essaie avec FileSystemObject (cf MSDN) sinon tente ce code pour voir. Il ferme et ouvre le fichier au bout d'un certain nombre de lignes écrites. A toi de faire varier "Nb_EcritureMax". C'est plus long à l'exécution

Dim FileNumber As Long
Dim i_ligne As Long
Dim j_fichier As Long
Dim Nb_Ecriture As Long
Dim Nb_EcritureMax As Long

Nb_EcritureMax = 1000

For j_fichier = 1 To 30

'Suppression du fichier s'il existe
If Dir("c:\test" & CStr(j_fichier) & ".txt") <> "" Then
Kill "c:\test" & CStr(j_fichier) & ".txt"
End If

Nb_Ecriture = 0
FileNumber = FreeFile

'écriture dans le fichier
Open "c:\test" & CStr(j_fichier) & ".txt" For Append As #FileNumber

For i_ligne = 0 To 3500000
Print #FileNumber, "azertyuiop"
Nb_Ecriture = Nb_Ecriture + 1

'libération de la mémoire en fermant et ré-ouvrant le fichier
If Nb_Ecriture > Nb_EcritureMax Then
Nb_Ecriture = 0
Close #FileNumber
FileNumber = FreeFile
Open "c:\test" & CStr(j_fichier) & ".txt" For Append As #FileNumber
End If

Next i_ligne

Close #FileNumber

'fichier suivant
Next j_fichier
-------------------------------
Réponse au message :
-------------------------------

Aie

je viens d'essayer le code
et
bien aux 17 eme fichier la mémoire est pleine

où ai je fais l'erreur?
j'ai fait un copier coller du code

cela viens de mon système d'exploitation ? j'ai windows 98



-------------------------------
Réponse au message :
-------------------------------

'Le code suivant crée 35 fichiers textes de 40 Mo environ
'Pendant l'exécution, dans le gestionnaire des taches, l'UC est à 100% et la mémoire reste stable -> 112000K environ/256 Mo Ram)

Dim FileNumber As Long
Dim i_ligne As Long
Dim j_fichier As Long

For j_fichier = 1 To 30
FileNumber = FreeFile
Open "c:\test" & CStr(j_fichier) & ".txt" For Output As #FileNumber
For i_ligne = 0 To 3500000
Print #FileNumber, "azertyuiop"
Next i_ligne
Close #FileNumber
Next j_fichier


-------------------------------
Réponse au message :
-------------------------------

Je ferme le fichier open avec l'instruction Close #

est ce la bonne méthode ou y'en a t il une autre ?



-------------------------------
Réponse au message :
-------------------------------

Peut être cela pourra t'aider:

Si, pour créer tes fichiers textes, tu ouvres le fichier (avec l'instructuion Open ou la méthode OpenTextFile de l'objet FileSystemObject, par exemple), alors pense à le refermer avant d'en ouvrir un autre.



-------------------------------
Réponse au message :
-------------------------------

avec VB6 je fait une création de fichier textes d'une taille de 40 Mo environs.

avec une boucle For le prog crée un fichier texte à chaque tour de boucle.

mon problème c'est que au fur et à mesur que le programme crée les fichiers texte, la quantité de mémoire vive disponible diminue aussi. et au bout de 20 fichiers créés je suis à 100% d'utilisation de la mémoire vive. ( j'ai + de 700 Mo ram)
je comprend pas pourquoi alors que les fichiers sont créés sur le disque dur???

est ce quelqu'un pourrait m'expliquer pourquoi et comment résoudre le problème (récuperer la mémoire)

merci de votre attention

a+

yann







jeudi 19 septembre 2002 à 16:47:37 | Re : Problème avec mémoire Vive

YahnIck

En faite mon problème n'est pas la création des fichiers, car m^me arrivé à 100% de la mémoire il continue à les créer. il doit certainement utiliser le disque dur.

bon problème c'est que dès que les fichiers ont été créer, le prog enchaine sur une autre tache qui gère des images, or pour traiter des images il me faut de la memoire et lorsque la tache commence ben la memoire ne c'est pas vidé suite à la fin de la tache précédente (la création des fichiers) et là ça plante!!



-------------------------------
Réponse au message :
-------------------------------

Quand on ouvre un fichier et que l'on travail dessus, de même pour les EXE, ou n'importe quel process, c'est dans la mèmoire vive que ça se passe. (heuresement d'ailleur, parce que quand on voit la différence entre les temps d'accès disque et ceux de la mèmoire vive, on comprend mieux pourquoi ça marche comme ça)...

Bref, tout ça pour dire, que quand on charge un fichier en mémoire vive (c'est exactement ce que fais la commande Open), on occupe une place mémoire statique, un peu comme un tableau...

Un fichier de 40 Mo ne tiendra pas forcément dans la mémoire vive, car il faut qu'il y ait 40 Mo de libre à la suite...
Mais ce que je ne comprend pas, c'est pourquoi est-ce que ce bon vieux Windows ne Swap pas sur le disque dur quand il n'a pas la place nécessaire en Ram... (c'est ce qui se passe quand on ouvre un très très gros fichier . doc avec Word par exemple... on entend le disque dur qui rame.... bzzzz et d'ailleur, le Pc rame aussi, parce que la Swap est très gourmand en ressource...).

Moi j'ai le même blème, quand j'ouvre un fichier texte de plus de 10 Mo pour le chargé dans un TextBox, ça plante... (bon, j'ai que 128 Mo de Ram, mais quand même!!! merde.... lol)

Donc la question, c'est pourquoi est-ce qu'il ne swap pas ce prog VB, est-ce qu'il faut lui dire, parce que ça a pas l'air de se faire par défaut et pourtant, je croyais que c'était Windaube qui gérait la mémoire vive...

En tout cas laisse tomber l'objet FileSystem, ça bopuffe encore plus de ressource, c'est un ActiveX, contrairement à Open, Close qui sont des méthodes de classes internes à VB.

Jockos


-------------------------------
Réponse au message :
-------------------------------

Aïe en effet.
J'ai Windows 2000 et aucun problème.
Il ne doit pas gérer l'écriture sur disque de la même façon.
Essaie avec FileSystemObject (cf MSDN) sinon tente ce code pour voir. Il ferme et ouvre le fichier au bout d'un certain nombre de lignes écrites. A toi de faire varier "Nb_EcritureMax". C'est plus long à l'exécution

Dim FileNumber As Long
Dim i_ligne As Long
Dim j_fichier As Long
Dim Nb_Ecriture As Long
Dim Nb_EcritureMax As Long

Nb_EcritureMax = 1000

For j_fichier = 1 To 30

'Suppression du fichier s'il existe
If Dir("c:\test" & CStr(j_fichier) & ".txt") <> "" Then
Kill "c:\test" & CStr(j_fichier) & ".txt"
End If

Nb_Ecriture = 0
FileNumber = FreeFile

'écriture dans le fichier
Open "c:\test" & CStr(j_fichier) & ".txt" For Append As #FileNumber

For i_ligne = 0 To 3500000
Print #FileNumber, "azertyuiop"
Nb_Ecriture = Nb_Ecriture + 1

'libération de la mémoire en fermant et ré-ouvrant le fichier
If Nb_Ecriture > Nb_EcritureMax Then
Nb_Ecriture = 0
Close #FileNumber
FileNumber = FreeFile
Open "c:\test" & CStr(j_fichier) & ".txt" For Append As #FileNumber
End If

Next i_ligne

Close #FileNumber

'fichier suivant
Next j_fichier
-------------------------------
Réponse au message :
-------------------------------

Aie

je viens d'essayer le code
et
bien aux 17 eme fichier la mémoire est pleine

où ai je fais l'erreur?
j'ai fait un copier coller du code

cela viens de mon système d'exploitation ? j'ai windows 98



-------------------------------
Réponse au message :
-------------------------------

'Le code suivant crée 35 fichiers textes de 40 Mo environ
'Pendant l'exécution, dans le gestionnaire des taches, l'UC est à 100% et la mémoire reste stable -> 112000K environ/256 Mo Ram)

Dim FileNumber As Long
Dim i_ligne As Long
Dim j_fichier As Long

For j_fichier = 1 To 30
FileNumber = FreeFile
Open "c:\test" & CStr(j_fichier) & ".txt" For Output As #FileNumber
For i_ligne = 0 To 3500000
Print #FileNumber, "azertyuiop"
Next i_ligne
Close #FileNumber
Next j_fichier


-------------------------------
Réponse au message :
-------------------------------

Je ferme le fichier open avec l'instruction Close #

est ce la bonne méthode ou y'en a t il une autre ?



-------------------------------
Réponse au message :
-------------------------------

Peut être cela pourra t'aider:

Si, pour créer tes fichiers textes, tu ouvres le fichier (avec l'instructuion Open ou la méthode OpenTextFile de l'objet FileSystemObject, par exemple), alors pense à le refermer avant d'en ouvrir un autre.



-------------------------------
Réponse au message :
-------------------------------

avec VB6 je fait une création de fichier textes d'une taille de 40 Mo environs.

avec une boucle For le prog crée un fichier texte à chaque tour de boucle.

mon problème c'est que au fur et à mesur que le programme crée les fichiers texte, la quantité de mémoire vive disponible diminue aussi. et au bout de 20 fichiers créés je suis à 100% d'utilisation de la mémoire vive. ( j'ai + de 700 Mo ram)
je comprend pas pourquoi alors que les fichiers sont créés sur le disque dur???

est ce quelqu'un pourrait m'expliquer pourquoi et comment résoudre le problème (récuperer la mémoire)

merci de votre attention

a+

yann







jeudi 19 septembre 2002 à 18:11:38 | Re : Problème avec mémoire Vive

imer

Faire un DoEvents ou utiliser l'API "sleep" pour laisser souffler le système ?....



-------------------------------
Réponse au message :
-------------------------------

En faite mon problème n'est pas la création des fichiers, car m^me arrivé à 100% de la mémoire il continue à les créer. il doit certainement utiliser le disque dur.

bon problème c'est que dès que les fichiers ont été créer, le prog enchaine sur une autre tache qui gère des images, or pour traiter des images il me faut de la memoire et lorsque la tache commence ben la memoire ne c'est pas vidé suite à la fin de la tache précédente (la création des fichiers) et là ça plante!!



-------------------------------
Réponse au message :
-------------------------------

Quand on ouvre un fichier et que l'on travail dessus, de même pour les EXE, ou n'importe quel process, c'est dans la mèmoire vive que ça se passe. (heuresement d'ailleur, parce que quand on voit la différence entre les temps d'accès disque et ceux de la mèmoire vive, on comprend mieux pourquoi ça marche comme ça)...

Bref, tout ça pour dire, que quand on charge un fichier en mémoire vive (c'est exactement ce que fais la commande Open), on occupe une place mémoire statique, un peu comme un tableau...

Un fichier de 40 Mo ne tiendra pas forcément dans la mémoire vive, car il faut qu'il y ait 40 Mo de libre à la suite...
Mais ce que je ne comprend pas, c'est pourquoi est-ce que ce bon vieux Windows ne Swap pas sur le disque dur quand il n'a pas la place nécessaire en Ram... (c'est ce qui se passe quand on ouvre un très très gros fichier . doc avec Word par exemple... on entend le disque dur qui rame.... bzzzz et d'ailleur, le Pc rame aussi, parce que la Swap est très gourmand en ressource...).

Moi j'ai le même blème, quand j'ouvre un fichier texte de plus de 10 Mo pour le chargé dans un TextBox, ça plante... (bon, j'ai que 128 Mo de Ram, mais quand même!!! merde.... lol)

Donc la question, c'est pourquoi est-ce qu'il ne swap pas ce prog VB, est-ce qu'il faut lui dire, parce que ça a pas l'air de se faire par défaut et pourtant, je croyais que c'était Windaube qui gérait la mémoire vive...

En tout cas laisse tomber l'objet FileSystem, ça bopuffe encore plus de ressource, c'est un ActiveX, contrairement à Open, Close qui sont des méthodes de classes internes à VB.

Jockos


-------------------------------
Réponse au message :
-------------------------------

Aïe en effet.
J'ai Windows 2000 et aucun problème.
Il ne doit pas gérer l'écriture sur disque de la même façon.
Essaie avec FileSystemObject (cf MSDN) sinon tente ce code pour voir. Il ferme et ouvre le fichier au bout d'un certain nombre de lignes écrites. A toi de faire varier "Nb_EcritureMax". C'est plus long à l'exécution

Dim FileNumber As Long
Dim i_ligne As Long
Dim j_fichier As Long
Dim Nb_Ecriture As Long
Dim Nb_EcritureMax As Long

Nb_EcritureMax = 1000

For j_fichier = 1 To 30

'Suppression du fichier s'il existe
If Dir("c:\test" & CStr(j_fichier) & ".txt") <> "" Then
Kill "c:\test" & CStr(j_fichier) & ".txt"
End If

Nb_Ecriture = 0
FileNumber = FreeFile

'écriture dans le fichier
Open "c:\test" & CStr(j_fichier) & ".txt" For Append As #FileNumber

For i_ligne = 0 To 3500000
Print #FileNumber, "azertyuiop"
Nb_Ecriture = Nb_Ecriture + 1

'libération de la mémoire en fermant et ré-ouvrant le fichier
If Nb_Ecriture > Nb_EcritureMax Then
Nb_Ecriture = 0
Close #FileNumber
FileNumber = FreeFile
Open "c:\test" & CStr(j_fichier) & ".txt" For Append As #FileNumber
End If

Next i_ligne

Close #FileNumber

'fichier suivant
Next j_fichier
-------------------------------
Réponse au message :
-------------------------------

Aie

je viens d'essayer le code
et
bien aux 17 eme fichier la mémoire est pleine

où ai je fais l'erreur?
j'ai fait un copier coller du code

cela viens de mon système d'exploitation ? j'ai windows 98



-------------------------------
Réponse au message :
-------------------------------

'Le code suivant crée 35 fichiers textes de 40 Mo environ
'Pendant l'exécution, dans le gestionnaire des taches, l'UC est à 100% et la mémoire reste stable -> 112000K environ/256 Mo Ram)

Dim FileNumber As Long
Dim i_ligne As Long
Dim j_fichier As Long

For j_fichier = 1 To 30
FileNumber = FreeFile
Open "c:\test" & CStr(j_fichier) & ".txt" For Output As #FileNumber
For i_ligne = 0 To 3500000
Print #FileNumber, "azertyuiop"
Next i_ligne
Close #FileNumber
Next j_fichier


-------------------------------
Réponse au message :
-------------------------------

Je ferme le fichier open avec l'instruction Close #

est ce la bonne méthode ou y'en a t il une autre ?



-------------------------------
Réponse au message :
-------------------------------

Peut être cela pourra t'aider:

Si, pour créer tes fichiers textes, tu ouvres le fichier (avec l'instructuion Open ou la méthode OpenTextFile de l'objet FileSystemObject, par exemple), alors pense à le refermer avant d'en ouvrir un autre.



-------------------------------
Réponse au message :
-------------------------------

avec VB6 je fait une création de fichier textes d'une taille de 40 Mo environs.

avec une boucle For le prog crée un fichier texte à chaque tour de boucle.

mon problème c'est que au fur et à mesur que le programme crée les fichiers texte, la quantité de mémoire vive disponible diminue aussi. et au bout de 20 fichiers créés je suis à 100% d'utilisation de la mémoire vive. ( j'ai + de 700 Mo ram)
je comprend pas pourquoi alors que les fichiers sont créés sur le disque dur???

est ce quelqu'un pourrait m'expliquer pourquoi et comment résoudre le problème (récuperer la mémoire)

merci de votre attention

a+

yann









1 2

Cette discussion est classé dans : fichier, problème, fichiers, mémoire, vive


Répondre à ce message

Sujets en rapport avec ce message

Problème avec mémoire Vive [ par YahnIck ] avec VB6 je fait une création de fichier textes d'une taille de 40 Mo environs.avec une boucle For le prog crée un fichier texte à chaque tour de bouc problème de fichier s longs [ par touil ] Mon programme de lecture des fichiers MP3 ne lit pas les fichiers MP3 dont les noms sont longs. par exemple je peux pas lire le fichier "xxxxxxxxxxxxx Problème avec les noms longs des fichiers [ par appstmd ] Bonjour !J'ai associé mon programme écrit en VB avec l'extension des documents qu'il lit, mais lorsque j'ouvre ce type de fichier depuis l'explorateur Couper/copier un fichier en mémoire [ par MyC ] Salut,Je cherche le moyen de copier/couper des fichiers en mémoire. C'est-à-dire de la même façon que le menu contextuel de l'exporateur qui apparâit modifier un fichier en mémoire vive [ par flippouille ] Comment puis-je mémoriser tous les octets d'un fichier en mémoire vive afin de faire un traitement dessusActuellement, j'ouvre un fichier sur le disue Pb de fichier - supression de l'allocation de mémoire [ par aKheNathOn ] Bonjour, j'ai un pb avec la gestion en mémoire des fichiers :J'écris un fichier linéaire en mode binaire, contenant un grand nombre de lignes, tout ça problème shellExecute + fenetre confirmation visio [ par occhipin ] Voila j'ai deux problèmes.Le premier concerne un logiciel flowcharter que j'ouvre garce à l'API shellexecute.Alors par exemple en pseudo code ca donne Gestion de la mémoire. [ par snip8 ] Salut à tous, alors on problème est très simple je suis débutant de chez débutant en visual basic (en faite c'est surtout sa le problème !).Je suis e problème de déploiement avec fichiers volumineux [ par yeyedeb ] Bonjour,Je dois générer une application windows forms, crée sous visual basic NET, avec des fichiers de + 1Go !!!Le problème est que le déploiement s' transfert fichiers serveur-client [ par idelphonse ] bonjour, J'ai un grand problème. j'utilise un serveur ftp(serv U)pour des transferts de fichiers avec mes clients. il se fait que quand je leur envois


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,420 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.