![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование SetFilePointer и SetEndOfFile.
Riply © (2008-02-03 18:35:00)Здравствуйте !
При "разборе полетов" возник следующий вопрос:
Стоит ли применять SetFilePointer, SetEndOfFile для задания размера
перед записью файлов, когда этот размер известен, а запись делается в
несколько WriteFile ?
Мой собеседник выдвинул предположение,
что на NTFS это может дать серьезные плюсы, в то же время,
существенно замедлит сохранение большого файла, например, на FAT.
Вот что он пишет:
"Преимущества такие:
1. Антифрагментация. Ты требуешь от системы выделения всего места сразу, и у
системы есть шанс выбрать блок походящего размера, используя $Bitmap.
2. Свободное место. Ты захватываешь требуемое свободное место сразу,
исключая этим ситуацию, когда нехватка свободного места выявляется в
процессе, и операцию приходится отменять, при этом время потраченое на
пройденую часть сохранения потрачено зря.
3. [NTFS specific] Производительность может быть немного выше, т.к.
SetFilePointer+SetEndOfFile не пишут в добавленые кластеры данные, при этом
операций с $Bitmap намного меньше, также меньше записей в данные атрибута в
MFT (все записи в $Bitmap и в MFT осуществляются с участием журналирования,
поэтому это не такие уж быстрые операции). Но я думаю что чтобы увидеть
разницу, надо смотреть при небольшом буфере, при этом разница не долна быть
большой.
Почему-то этим мало кто пользуется. Возможно, тут есть проблемы, которые я
не вижу. Поэтому не спешу применять метод."
Кто что думает о целесообразности применеия этих ф-ий ?
P.S.
Если будет необходима проверка типа: "Если NTFS делаем так, а если FAT то так",
то это @не очень красиво@, лучше тогда обойтись без использовани такой возможности
совсем.
KilkennyCat (2008-02-03 18:41:00) [21]> Если будет необходима проверка
может, я чего не понимаю, но учитывая ограничения FAT по размерности, проверку делать придется.