Читаю файл
Последовательно
Для каждого чтения выделяю буфер размера Buf_Size с помощью vector<UCHAR> vbuf(Buf_Size);
Закомментировал чтение файла
Оставил только выделение памяти
И удивился что, при размере буфера 0x80000 стало дольше работать
Почему?
Если заменяю vector на:
void *buf = malloc(Buf_Size); free(buf);
работает моментально
Почему?
vector каждый UCHAR прописывает нулём в цикле?
File_Size 0x450000000
Buf_Size 0x8000 Time: 5969 ms
Buf_Size 0x10000 Time: 5937 ms
Buf_Size 0x20000 Time: 5907 ms
Buf_Size 0x40000 Time: 5890 ms
Buf_Size 0x80000 Time: 8766 ms <<<<<<<<<<
Buf_Size 0x100000 Time: 8703 ms
Buf_Size 0x200000 Time: 8578 ms
Buf_Size 0x400000 Time: 8594 ms
Buf_Size 0x800000 Time: 8609 ms
Buf_Size 0x1000000 Time: 8672 ms
Buf_Size 0x2000000 Time: 8672 ms
Buf_Size 0x4000000 Time: 8656 ms
Buf_Size 0x8000000 Time: 8641 ms
Buf_Size 0x10000000 Time: 8593 ms
Buf_Size 0x20000000 Time: 8688 ms
Buf_Size 0x40000000 Time: 8906 ms
Код:
INT64 File_Size = 0x450000000;
//
Log->printf(L"File_Size 0x%I64x\n\n", File_Size);
//
for (ULONG Buf_Size = 0x8000; ; Buf_Size*=2)
{
Log->printf(L"Buf_Size 0x%-8x ", Buf_Size);
//
TMFS_Win32_Timer Timer;
//
for (INT64 p=0; p<File_Size; p+=Buf_Size)
{
vector<UCHAR> vbuf(Buf_Size);
//
//void *buf = malloc(Buf_Size); if (buf == NULL) throw TMFS_Exception(L"malloc fail"); free(buf);
//
//fr->Read(&vbuf[0], Buf_Size);
}
//
Timer.Report(Log);
}