[UPDATE] Как правило, от ваших исходных чисел 5 из каждых 1000, (Ill считать, что 5 байт является частью 1000, что делает Ваш подсчет 1000 шагов), если ваш счетчик шаг меньше 2х ваш размер блока, чем мой первоначальный ответ, является довольно хорошим объяснением. Это становится немного более сложным, если вы пройдете 2x размер вашего HD-блока, потому что в этот момент вы легко потеряете время чтения, когда сможете ускорить поиск ненужных (или, если на то пошло, ненужных) HD-блоков.
[ОРИГИНАЛ] Ну, это очень интересный вопрос, с тем, что я считаю, чтобы быть столь же интересный ответ (также несколько сложных). Я думаю, что на самом деле это сводится к нескольким другим вопросам, например, насколько большой размер блока, который вы реализовали на своем диске (или диск, на котором будет работать ваше программное обеспечение). Если размер вашего блока равен 4 КБ, тогда минимальный (true) минимальный размер вашего жесткого диска для вас составляет 4096 байт. В вашем случае, если вам действительно нужно 5 символов каждые 1000, то, если вы сделали это со ВСЕМИ дисковым IO, тогда вы по существу перечитывали один и тот же блок 4 раза и делали бы 3 раза между ними (ДЕЙСТВИТЕЛЬНО НЕ ЭФФЕКТИВНЫМ).
Мое личное убеждение состоит в том, что вы могли бы (если бы вы хотели быть эффективным приводом) в своем коде, попытайтесь понять, какой размер блока вашего диска вы используете, затем используйте этот размер, чтобы узнать, сколько байтов в то время вы должны принести в ОЗУ. Таким образом, у вас не должно быть ОГРОМНОГО RAM-буфера, но в то же время на самом деле не нужно SEEK, вы не будете тратить (или выполнять) какие-либо дополнительные чтения.
ЭТО НАИБОЛЕЕ ЭФФЕКТИВНО. Я не думаю, что это самый эффективный, но он может быть достаточно хорош для производительности, в которой вы нуждаетесь, кто знает. Я думаю, что даже если голова чтения - это то место, где вы хотите, чтобы это было, если вы выполняете алгоритмическую работу в середине каждого блока, а не читаете весь файл сразу, что вы потеряете время в ожидании следующее вращение дисков. Если вы должны были прочитать все сразу, диск должен иметь возможность выполнять последовательное чтение всех частей файла одновременно. Опять же, не так просто, как если бы ваш файл был действительно более одного блока, на вращающемся диске вы можете пострадать, если ваш диск не был дефрагментирован, так как может потребоваться выполнить случайные запросы, чтобы перейти к следующему блоку.
Извините, за длинный ответ, но, как правило, в вашем случае нет простого ответа.
Я думаю, что общая производительность была бы лучше, если бы вы просто сразу прочитали весь файл. Невозможно это сделать, поскольку каждая система будет иметь по-разному параметры параметров их установки привода и т. Д.
Огромное предположение, что файл является и останется непрерывным! –
Правда, но должны быть способы гарантировать это, не так ли? Более того, дефрагментация приведет к большему повреждению последовательных чтений, чем к поиску. – DED
Обеспечение соприкосновения не является бесплатным. Моделирование framented файлов менее прост. Я бы подумал, что это почти так же влияет на серийное чтение и поиск. Ужасно, поэтому с интервалом, который был «блоком или больше». –