|
Trouver une ressource
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)
Informations & options pour cette discussion
|
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
|
|
|
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
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|