У меня есть этот код для чтения 64 МБ двоичных данных в память:
#define SIZE 8192
char* readFromFile(FILE* fp)
{
char* memBlk = new char[SIZE*SIZE];
fread(memBlk, 1, SIZE*SIZE, fp);
return memBlk;
}
int main()
{
FILE* fp = fopen("/some_path/file.bin", "rb+");
char* read_data = readFromFile(fp);
// do something on read data
// EDIT: It is a matrix, so I would be reading row-wise.
delete[] memBlk;
fclose(fp);
}
Когда я использую этот код независимо, время выполнения составляет менее 1 секунды.
Однако, когда я помещаю точно такой же код (только для сравнения) в одно из наших приложений, время выполнения составляет 146 секунд. Приложение довольно громоздкое с использованием памяти до 5G.
Некоторые из них могут быть объяснены текущим использованием памяти, отсутствием кэша и другими факторами, но разница в 146 раз кажется мне неоправданной.
Может кто-нибудь объяснить это?
Отображение памяти может улучшить производительность. Любые другие предложения также приветствуются.
Спасибо.
Информация о машине:
Linux my_mach 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:56:44 EST 2007 x86_64 x86_64 x86_64 GNU/Linux
РЕДАКТИРОВАТЬ:
Спасибо за ваши ответы. Однако я упустил тот факт, что на самом деле место, куда я вставил, называлось 25 раз, так что это точно не фактор 146.
В любом случае, ответы были полезны, спасибо за ваше время.