PDA

Visualizza la versione completa : [c++] ReadFIle lentissima


Stoicenko
24-09-2009, 11:16
Salve,

Ho un filtro directshow che serve per leggere un file di tipo custom..

All'interno uso un thread che legge a blocchi il file mettendolo in un buffer.. ma ho notato che a volte la ReadFile ci mette anche più di mezzo secondo per leggere blocchi di circa 7 megabite..

[code]

BYTE *TempBuf = new BYTE[144000 * 25 * 2];
DWORD dwRead;

bool ok = true;

ok = ReadFile (m_hFile, TempBuf, 144000 * 25 * 2, &dwRead, NULL);

[code]

dove m_hFile è un handle al file aperto in lettura..

Idee?

MItaly
24-09-2009, 15:31
Il ritardo può essere causato da moltissimi fattori... dalla posizione della testina sul disco al ritardo causato dall'antivirus, o anche dall'effettiva allocazione della memoria che si verifica al momento di riempire il buffer. Dovresti munirti di un profiler e fare qualche prova (lettura file di dimensioni diverse, riempimento del buffer con numeri casuali invece che con il contenuto del file, disattivazione dell'antivirus, ...).

Stoicenko
24-09-2009, 16:08
lo sto provando su file in rete (rete a un gigabit) senza antivirus..

cmq anche in locale lo fa.. ma solo su file grandi (alcuni giga) mentre su file piccoli no..

l'hard disk sembra avere ottime performance e non è frammentato (preso da 0)

MItaly
24-09-2009, 16:29
Se è su rete le cose si complicano ancora di più, perché ci va di mezzo l'HD del PC remoto, tutti i layer di rete del client e del server, le eventuali collisioni e pacchetti persi, nonché l'autenticazione (che può darsi che debba essere ripetuta ogni tot, non conosco bene le specifiche del protocollo SMB).

Loading