"Out of memory" à la fin d'une routine manipulant des "string" importants
Bonjour,
Je rencontre le problème suivant avec l'une de mes routines visant à stocker un fichier en mémoire pour effectuer diverses opérations dessus.
Le fichier en question pèse environ 500Mo avec quelques 12 000 lignes.
La routine s'effectue sans problèmes, le fichier est stocké dans une variable puis découpé par ligne dans un tableau. j'arrive à afficher les éléments de ce tableau.
Seulement, au moment de quitter la routine (avant (ou après?) le end sub) j'obtiens plusieurs fois le message "out of memory".
voici la fonction pour charger le fichier dans une variable "string":
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| Function ReadFileToBuffer(ByVal szFileName As String, _
ByRef errCode As Integer, _
ByRef errString As String) As String
Dim f As Integer
Dim buffer As String
' trappe les erreurs
On Error GoTo ReadFileToBuffer_ERR
' Ouverture du fichier en 'Binary'
f = FreeFile
Open szFileName For Binary As #f
' ' préallocation d'un buffer à la taille du fichier
buffer = Space$(LOF(f))
' ' lecture complète du fichier
Get #f, , buffer
Close #f
ReadFileToBuffer = buffer
ReadFileToBuffer_END:
Exit Function
ReadFileToBuffer_ERR:
' Gestion d'erreur
ReadFileToBuffer = ""
errCode = Err.number
errString = Err.Description
Resume ReadFileToBuffer_END
End Function |
J'utilise ensuite cette fonction dans le code suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Sub LoadResultFile()
'declaration
Dim fileName As String
Dim Results() As String, tempResult As String
Dim errCode As Integer, errString As String
'get filename and store it
fileName = pickUpFilename("Results", "*.dat;*.txt") 'simple fonction pour récupérer le chemin complet du fichier
tempResult = ReadFileToBuffer(fileName, errCode, errString)
If errCode = 0 Then
Results = Split(tempResult, vbCrLf)
MsgBox Results(0) 'cette commande passe sans soucis!!!
MsgBox Ubound(Results) 'renvoie bien 12000
Else
MsgBox "Problem in reading file!" & vbCrLf & "error " & errCode & ": " & errString, vbCritical
End If
End Sub |
Avez-vous une idée concernant les causes de l'erreur (à priori, il n'y a pas de soucis pour charger l'ensemble en mémoire, mais plutôt au moment de la libération de mémoire faites par le compilo)?
Si oui, savez-vous comment y remédier?
Merci de m'avoir lu.