02/12/07 21:56
claudio1980
Il mio problema è leggere file di dimensioni di diversi mega per l'esattezza 26.
Per rendere la lettura il più veloce possibile vorrei fare un unica lettura in un buffer abbastanza grande, naturalmente non posso dichiarare quanto segue:
perché ovviamente va in crash.
Allora ho visto che si puo creare uno spazio di memoria virtuale dedicato di tot byte divisibli per i byte di una pagina di memoria attraverso la funzione VirtualAlloc.
questo il codice dell'uso di VirtualAlloc:
e finqui totto ok, non mi restituisce errori, anche se il processo sul task manager non aumenta la dimensione della memoria allocata ne fisica ne virtuale
poi uso questa funzione così:
durante il debug seguendo passo passo vado dentro la funzione CFile::Read e all'interno viene eseguita la funzione FileRead che è quella che mi da errore, naturalmente "Errore sconosciuto" la variabili sono tutte ok, e non viene letto neanche un byte.
Sapete aiutarmi?
Per rendere la lettura il più veloce possibile vorrei fare un unica lettura in un buffer abbastanza grande, naturalmente non posso dichiarare quanto segue:
void lpvBuffer[26000000]
perché ovviamente va in crash.
Allora ho visto che si puo creare uno spazio di memoria virtuale dedicato di tot byte divisibli per i byte di una pagina di memoria attraverso la funzione VirtualAlloc.
questo il codice dell'uso di VirtualAlloc:
BOOL CreateBuffer(UINT bytetoalloc, LPVOID &lpvBuffer) { UINT num_pages; SYSTEM_INFO sSysInfo; GetSystemInfo(&sSysInfo); num_pages = (UINT)bytetoalloc/sSysInfo.dwPageSize; lpvBuffer = VirtualAlloc(NULL, (SIZE_T)num_pages*sSysInfo.dwPageSize, MEM_RESERVE | MEM_PHYSICAL, PAGE_READWRITE); if (lpvBuffer == NULL ) { AfxMessageBox(_T("Impossibile Allocare!")); return FALSE; } return TRUE; }
e finqui totto ok, non mi restituisce errori, anche se il processo sul task manager non aumenta la dimensione della memoria allocata ne fisica ne virtuale
poi uso questa funzione così:
CFileException e; CFile filePR; UINT bytetoalloc; LPVOID lpvBuffer = NULL; if (filePR.Open(fd.GetPathName(), CFile::modeReadWrite ,&e)) { bytetoalloc = (UINT) filePR.GetLength(); if (CreateBuffer(bytetoalloc, lpvBuffer)) { if(filePR.Read(lpvBuffer, bytetoalloc)) { ....... } } }
durante il debug seguendo passo passo vado dentro la funzione CFile::Read e all'interno viene eseguita la funzione FileRead che è quella che mi da errore, naturalmente "Errore sconosciuto" la variabili sono tutte ok, e non viene letto neanche un byte.
Sapete aiutarmi?
Ultima modifica effettuata da claudio1980 02/12/07 22:04
aaa