Пространство резервного диска прежде, чем записать файл для эффективности

Я заметил огромную производительность, пораженную в одном из моих проектов, когда вход включен впервые. Но когда предел файла журнала достигнут, и программа начинает писать в начало файла снова, регистрирующаяся скорость намного быстрее (приблизительно на 50% быстрее). Нормально установить размер файла журнала на сотни MBS.

Большинство менеджеров загрузок выделяет фиктивный файл с необходимым размером прежде, чем начать загружать файл. Это делает запись более эффективной, потому что целый блок выделяется сразу.

Что лучший способ к пространству резервного диска эффективно некоторым фиксированным размером, когда моя программа запускается впервые?

15
задан haggag 1 March 2010 в 15:36
поделиться

3 ответа

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
}
8
ответ дан 1 December 2019 в 04:47
поделиться

wRAR правильный. Откройте новый файл, используя вашу любимую библиотеку, затем перейдите к предпоследнему байту и запишите туда 0. Это должно выделить все необходимое дисковое пространство.

4
ответ дан 1 December 2019 в 04:47
поделиться

Вот простая функция, которая будет работать для файлов любого размера:

void SetFileSize(HANDLE hFile, LARGE_INTEGER size)
{
    SetFilePointer(hFile, size, NULL, FILE_BEGIN);
    SetEndOfFile(hFile);
}
0
ответ дан 1 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: