Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.29;
Скачать: CL | DM;

Вниз

Использование SetFilePointerEx.   Найти похожие ветки 

 
Riply ©   (2007-07-01 01:27) [0]

Здравствуйте !
Подскажите, пожалуйста, как лучше поступить в такой ситуации:
Допустим нам надо установить "файловый поинтер" в новое значение - NewPointer.
NewPointer - ну очень болшое число :). Мы знаем, что в настоящее время,
"файловый поинтер" совсем рядом с NewPointer.
Какой из вариантов:
1. if SetFilePointerEx(Handle, 0, @OldPointer, FILE_CURRENT) then
   SetFilePointerEx(Handle, NewPointer - OldPointer, nil, FILE_CURRENT);
2. SetFilePointerEx(Handle, NewPointer, nil, FILE_BEGIN);
лучше выбрать ?
P.S.
Просто я не знаю, как "внутри себя" работает SetFilePointerEx :(


 
KilkennyCat ©   (2007-07-01 03:29) [1]

Без разницы, наверное. Непонятно только, зачем проверка в 1.


 
begin...end ©   (2007-07-01 09:11) [2]

Лучше выбрать второй вариант.


 
Riply ©   (2007-07-01 10:36) [3]

> [1] KilkennyCat ©   (01.07.07 03:29)
>Без разницы, наверное. Непонятно только, зачем проверка в 1.
Там не проверка, а получение поинтера :)

>[2] begin...end ©   (01.07.07 09:11)
>Лучше выбрать второй вариант.
Спасибо.
А можно мотивировать это утверждение ?
Или оно "интуитивно ясно из общих соображений"(с) ? :)


 
begin...end ©   (2007-07-01 12:29) [4]

> Riply ©   (01.07.07 10:36) [3]

Близость требуемой позиции файлового указателя к его текущей позиции на этапе исполнения SetFilePointerEx не имеет значения. Перемещение  указателя этой функцией сводится к вызову внутренней функции NtSetInformationFile, в которую должна передаваться требуемая абсолютная позиция указателя (смещение от начала файла).

С помощью отладчика легко убедиться, что в случае вызова SetFilePointerEx c флагом FILE_CURRENT внутри неё вначале будет вызвана NtQueryInformationFile, для определения текущего положения указателя и последующего вычисления абсолютного смещения. Если же использовать флаг FILE_BEGIN, вызова NtQueryInformationFile не потребуется.

Отсюда ясно, что первый вариант не только не принесёт никакого выигрыша в производительности, но даже и окажется медленнее второго варианта, из-за а) двойного вызова SetFilePointerEx; б) исполнения внутренних вызовов этой функции, ненужных в случае флага FILE_BEGIN.


 
Riply ©   (2007-07-01 12:51) [5]

> [4] begin...end ©   (01.07.07 12:29)
Спасибо большое !



Страницы: 1 вся ветка

Текущий архив: 2007.07.29;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.02 c
15-1183459403
исследователь
2007-07-03 14:43
2007.07.29
Подскажите с покупкой


15-1183018047
ssa
2007-06-28 12:07
2007.07.29
Borland Delphi 2007 for Win32 Enterprise Media Kit


15-1183549445
antonn
2007-07-04 15:44
2007.07.29
опять про html вопрос%)


2-1183363790
Aibo
2007-07-02 12:09
2007.07.29
как создавать файл при помощи WinApi


2-1183538670
\/iKTOR
2007-07-04 12:44
2007.07.29
Прога работы с вероятностными выпадениями чисел (0 и 1)