![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 | |
Форумчанин
Регистрация: 07.08.2007
Сообщений: 154
|
![]() Цитата:
Код:
|
|
![]() |
![]() |
![]() |
#12 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
я бы рекомендовал примерно такой код: Код:
Последний раз редактировалось Serge_Bliznykov; 10.07.2012 в 15:17. |
|
![]() |
![]() |
![]() |
#13 | |
Форумчанин
Регистрация: 07.08.2007
Сообщений: 154
|
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#14 |
Пользователь
Регистрация: 24.11.2009
Сообщений: 45
|
![]()
Я может что-то не понимаю, но почему ваш код так быстро работает, по сравнению с dmitriegorovih кодом
В разы быстрее, такое ощущение,что он что-то пропускает. Хотя я в ваш код добавил остальные циклы. Так быстро не может быть Update. Смотрю исправили код, убрали константу. Но результат тот же. И не могли бы вы прокомментировать код. Последний раз редактировалось MORPEH; 10.07.2012 в 16:14. |
![]() |
![]() |
![]() |
#15 | |
Ещё не
Форумчанин
Регистрация: 04.01.2010
Сообщений: 517
|
![]() Код:
переменная i стоит то есть вы хотите перебрать значения которые не влезут в диапазон типа byte. разве не n переменную нужно вставлять? P.S. Самое интересное компилится и не выдает ошибки ![]() P.P.S. Цитата:
Воображение важнее, чем знания. (Albert Einstein)
![]() Последний раз редактировалось dmitriegorovih; 10.07.2012 в 18:04. |
|
![]() |
![]() |
![]() |
#16 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() Цитата:
Эти алгоритмы применяются исключительно к накопителю, причем накопителю, работающему по вполне определенному физическому принципу. Как правило, для магнитного носителя. С файлом расположенном, скажем, на CD такое сделать принципиально невозможно ввиду отсутствия операции записи или стирания. С флеш-памятью - своя проблема, т.к. при новой записи контроллер подставляет другие физические "сектора" с целью сделать износ ячеек более равномерным. |
|
![]() |
![]() |
![]() |
#17 |
Пользователь
Регистрация: 24.11.2009
Сообщений: 45
|
![]()
dmitriegorovih
Как в твоем примере, сделать что бы 3 числа шло? s-andriano Только для жестких дисков. Поэтому такой алгоритм должен работать |
![]() |
![]() |
![]() |
#18 | |
Ещё не
Форумчанин
Регистрация: 04.01.2010
Сообщений: 517
|
![]() Цитата:
Код:
Воображение важнее, чем знания. (Albert Einstein)
![]() |
|
![]() |
![]() |
![]() |
#19 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
А вылезет он, если файлик сделать размером более 255 байт! конечно же, нужно делать переменную i того же типа, что и TFileStream.Size - а именно типа LongInt Код:
Цитата:
Дело в том, что я не использую позиционирование в цикле. Это уже ОГРОМНЫЙ выигрыш в скорости. Во-вторых, чтение нафик не нужно - это ещё плюс в быстродействии. Ну и цикл for выполняется быстрее цикла while, т.к. не нужно вычислять размер файла при записи каждого байта.. Если хотите чуть чуть замедлить выполнение (и при этом, возможно, улучшить надёжность кода), то после каждого цикла записи ЗАКРЫВАЙТЕ файл (это можно делать через метод деструктора f.Free; или через вызов процедуры FreeAndNil(f); но тогда, перед каждый новым циклом не забывайте заново открывать файл: :=TFileStream.Create(fname,fmOpenRe adWrite); а вообще, по сути задачи, я полностью согласен с постом #16 (c) s-andriano! Золотые слова. Можно перечитывать их до полного усвоения и просветления! Последний раз редактировалось Serge_Bliznykov; 11.07.2012 в 00:39. |
||
![]() |
![]() |
![]() |
#20 | |||
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() Цитата:
Современная реализация файловых функций работает абсолютно одинаково как при последовательном чтении, так и при чтении с последовательным позиционированием, т.к. не транслирует команды позиционирования жесткому диску без крайней необходимости. Цитата:
Цитата:
Таким образом, приходим к выводу, что в Вашем списке нет ни одной причины, по которой Ваш код мог бы работать быстрее аналога. (разумеется, возможно существование причин, о которых Вы не упомянули) Кроме того, в Вашем коде я не обнаружил никаких средств отключения дискового кэша. Так что вероятнее всего Ваша программа работает так: - несколько раз обновляется значение в буфере записи, - результат один раз записывается на диск. |
|||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Познакомлюсь с гетеросексуалистом из Питера | Гвиневра | Свободное общение | 161 | 19.04.2012 10:41 |
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм. | iamhated | Помощь студентам | 1 | 15.01.2012 16:24 |
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм | iamhated | Помощь студентам | 1 | 14.01.2012 16:22 |
Программисты БД из Питера | GRIV | Фриланс | 8 | 04.03.2011 16:28 |
Не желает работать правильно программа из Питера Абеля | bullvinkle | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 28.02.2009 11:11 |