Я заметил огромную производительность, пораженную в одном из моих проектов, когда вход включен впервые. Но когда предел файла журнала достигнут, и программа начинает писать в начало файла снова, регистрирующаяся скорость намного быстрее (приблизительно на 50% быстрее). Нормально установить размер файла журнала на сотни MBS.
Большинство менеджеров загрузок выделяет фиктивный файл с необходимым размером прежде, чем начать загружать файл. Это делает запись более эффективной, потому что целый блок выделяется сразу.
Что лучший способ к пространству резервного диска эффективно некоторым фиксированным размером, когда моя программа запускается впервые?
void ReserveSpace(LONG spaceLow, LONG spaceHigh, HANDLE hFile)
{
DWORD err = ::SetFilePointer(hFile, spaceLow, &spaceHigh, FILE_BEGIN);
if (err == INVALID_SET_FILE_POINTER) {
err = GetLastError();
// handle error
}
if (!::SetEndOfFile(hFile)) {
err = GetLastError();
// handle error
}
err = ::SetFilePointer(hFile, 0, 0, FILE_BEGIN); // reset
}
wRAR правильный. Откройте новый файл, используя вашу любимую библиотеку, затем перейдите к предпоследнему байту и запишите туда 0. Это должно выделить все необходимое дисковое пространство.
Вот простая функция, которая будет работать для файлов любого размера:
void SetFileSize(HANDLE hFile, LARGE_INTEGER size)
{
SetFilePointer(hFile, size, NULL, FILE_BEGIN);
SetEndOfFile(hFile);
}