Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
eccomi a porre un nuovo quesito.....
sto' usando la funzione redim che mi incrementa la matrice di variabili, questo pero' mi carica lmemoria, questa funzione viene richiamata piu' volte in maniera ciclica, e le variabili allocate in memoria non vengono mai cancellate aumentando di continuo ed esaurendo la memria......
ci sarebbe il modo esaurito un ciclo di di far tornare la matrice di variabili alle dimensioni originali in modo che liberi la memoria, cosi' al prossimo utilizzo riparta da 0?
If ReadFile(hFile, uBuffer(0), lFileSize, lBytesRead, ByVal 0&) <> 0 Then
If lBytesRead <> lFileSize Then
ReDim Preserve uBuffer(lBytesRead - 1)
EndIf
'Acquire the context, create the hash, and hash the data
If CryptAcquireContext(hCrypt, vbNullString, vbNullString, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) <> 0 Then
If CryptCreateHash(hCrypt, CALG_MD5, 0&, 0&, hHash) <> 0 Then
If CryptHashData(hHash, uBuffer(0), lBytesRead, ByVal 0&) <> 0 Then
If CryptGetHashParam(hHash, HP_HASHVAL, uMD5(0), lMD5Length, 0) <> 0 Then
'Build the MD5 string
For i = 0 To lMD5Length - 1
sMD5 = sMD5 &(Right$("0"&Hex$(uMD5(i)), 2))
Next i
EndIf
EndIf
'Destroy the hash
CryptDestroyHash hHash
EndIf
'Release the context
CryptReleaseContext hCrypt, 0
EndIf
EndIf
EndIf
'Close the handle to the file
CloseHandle hFile
EndIf
'Convert to lower case
GetMD5 =LCase$(sMD5)
EndFunction
non ho bisogno di incrementare la memoria, ma di incrementare la variabile " ubuffer() " che inevitabilmente occupa memoria, dovrei riuscire a svuotare la variabile alla fine della funzione.....
una variabile in vb si puo' svuotare usando il nothing....ma in questo caso non mi riesce di usarlo.....
Postato originariamente da muteblaster: non ho bisogno di incrementare la memoria, ma di incrementare la variabile " ubuffer() " che inevitabilmente occupa memoria
Quindi, che differenza c'e' con quello che ti ho detto?
Testo quotato
dovrei riuscire a svuotare la variabile alla fine della funzione.....
Non e' affatto necessario.
Quell'array di byte e' locale alla funzione.
Al termine della funzione, non esiste piu'.
Testo quotato
una variabile in vb si puo' svuotare usando il nothing....
Non c'entra nulla ... il nothing non serve a "svuotare" nulla ma per distruggere per le istanze di una classe (per gli oggetti) ... non e' questo il caso.
Testo quotato
ma in questo caso non mi riesce di usarlo.....
E infatti non c'entra nulla.
In conclusione, non devi fare niente.
Ultima modifica effettuata da theprogrammer il 31/01/2009 alle 13:35
()
Newbie
Messaggi: Iscritto:
Postato alle 17:12
Sabato, 31/01/2009
se io faccio lo hash di un singolo file non ho problemi , ma se lo faccio di molti file , per esempio di una intera diretory mi da errore di memoria esaurita.....
come dice theprogrammer alla fine della funzione ubuffer (o come si kiamava) viene distrutto automaticamente...mi pare ke la funzione accetti un solo file alla volta...quindi come fai a "dargli" un'intera directory?
io penso che in un button ci metti tipo un ciclo magari anche crazie ai componente filebox e dirbox però se prendi un file alla volta significa (come dice theprogrammer) che richiami la funzione, ubuffer si riempie, la funzione finisce, la variabile ubuffer smette di esistere xk viene distrutta. Quindi non è il problema che in ubuffer si accumula sempre + roba perchè ogni volta parte da 0. Quindi si tratta di un file troppo grande da aprire e come giustamente dice theprogrammer dicci (quando ti da l'errore) a che file stava soprattutto alle dimensioni del file a cui si è fermato...
()
Newbie
Messaggi: Iscritto:
Postato alle 7:17
Domenica, 01/02/2009
avete perfettamente ragione.....
mi da l'errore su un file da 600 mb......
avete qualche idea su come risolvee il problema?....