
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
"При закрытии файла данные сбрасываются на диск автоматически, поэтому нет необходимости вызывать функцию FileFlush() перед вызовом функции FileClose()" - Да-да, начинаю понимать, о чём говорил sergeev. Получается, что для гарантированного сохранения последней записи в файл можно вместо FileClose() вызывать FileFlush()? И это будет грамотным решением?
не вместо, а по необходимости.
Flush - сбрасывает остатки данных, и НЕ закрывает файл. Вы ведь это хотите?
Close- сбрасывает остатки данных на диск и закрывает.
не вместо, а по необходимости.
Flush - сбрасывает остатки данных, и НЕ закрывает файл. Вы ведь это хотите?
Close- сбрасывает остатки данных на диск и закрывает.
Что-то минимизация по времени с использованием FileFlush() не очень получается:
2011.05.29 21:58:20 FlushSave (EURGBP,M1) FileFlush. GetTickCount() = 133766
2011.05.29 22:00:33 FlushSave (EURGBP,M1) FileClose. GetTickCount() = 133734
Фактически, на работу обеих функций уходит одинаковое время.
Как я понял вот эта строка перемещает позицию в начало файла без смещения. Что позволяет затереть имеющуюся инфу (т.е. дата обновляется но при этом не накапливается в файле)
При этом если использовать вместо SEEK_SET переход в конец файла данные накапливаются в файле.
Вы при Flush каждый раз открываете новый хэндл файла. Зачем? И не закрываете кстати.
Плюс функции FileFlush именно в том, что не надо переоткрывать хэндл.
1. Как я понял вот эта строка перемещает позицию в файле без смещения. Что позволяет затереть имеющуюся инфу (т.е. дата обновляется но при этом не накапливается в файле)
При этом если использовать вместо SEEK_SET переход в конец файла данные накапливаются в файле.Вы при Flush каждый раз открываете новый хэндл файла. Зачем? И не закрываете кстати.
Плюс функции FileFlush именно в том, что не надо переоткрывать хэндл.
Сделал вот так:
Результат:
2011.05.29 23:14:31 FlushSave (EURGBP,M1) FileFlush. GetTickCount() = 13563
2011.05.29 23:14:32 FlushSave (EURGBP,M1) FileClose. GetTickCount() = 531
При этом поменял местами строчки, согласно документации:
Но смысла вызывать FileFlush() перед FileWrite() пока не понял.Сделал вот так:
Результат:
2011.05.29 23:14:31 FlushSave (EURGBP,M1) FileFlush. GetTickCount() = 13563
2011.05.29 23:14:32 FlushSave (EURGBP,M1) FileClose. GetTickCount() = 531
При этом поменял местами строчки, согласно документации:
Но смысла вызывать FileFlush() перед FileWrite() пока не понял.Вот такой вариант:
Результат - FileFlush. GetTickCount() = 26125
Вот такой вариант:
Результат - FileClose. GetTickCount() = 3969Вот такой вариант дал результат от 47 до 110
1. Вывод - Использование FileFlush в цикле замедляет выполнение примерно в 260 раз.
2. Цикл на 50000 записей в таком варианте имеет следующий результат - FileFlush. GetTickCount() = 1891
3. При выполнении цикла на 50000 записей мне так и не удалось вырубить терминал без завершения записи в файл (закрывал терминал и "убивал" процесс).
4. При цикле в 100000 записей удавалось убить терминал, при этом в файле было больше 65536 записей (стока помещается в Excel 2003).
При этом поменял местами строчки, согласно документации:
Где в документации такое написано?
Как можно понять смысл того, в чем его нет? Верните порядок строк на родину и перепроверьте. Видимо в документации не совсем правильно выразились.
Но... Благодаря вашим тестам таки ошибка видимо обнаружилась -- FileFlush видимо жрет непозволительно много времени при отсутствии изменений.Interesting:
ОМГ! Там где вывод вообще маразм. Вот так потом и появляются заявочки типа "ООП быстрее" или "индикаторы медленные, надо переносить весь код в советник" .
Эксперт, напишите как правильно пользоваться этой функцией.
Гипотетически так:
Т.е. корректно сравнивать связку FileClose -- FileOpen с FileFlush.
Теоретически FileFlush должен быть составной частью FileClose и никак не может быть медленней связки.
Смысла флашить изменения до их появления нет, т.к. их еще нет :)
Но, несмотря на дикие выводы, тесты таки показательны, поэтому ждем комментариев разработчиков по поводу работы функции в случае, когда изменений нет.