[ОБНОВЛЕНИЕ] Как правило, из ваших исходных чисел 5 из каждых 1000 (я предполагаю, что 5 байтов являются частью 1000, таким образом, количество ваших шагов составляет 1000), если ваше количество шагов меньше 2x ваш размер блока, чем мой первоначальный ответ, является довольно хорошим объяснением. Это становится немного сложнее, когда вы превысите 2-кратный размер блока HD, потому что в этот момент вы легко потратите время чтения, когда вы можете ускориться, ища прошлые неиспользованные (или в этом отношении ненужные ) HD-блоки.
[ORIGINAL] Что ж, это чрезвычайно интересный вопрос, и я считаю, что ответ на него не менее интересен (хотя и несколько сложен). Я думаю, что на самом деле это сводится к паре других вопросов, например, насколько велик размер блока, который вы реализовали на своем диске (или на диске, на котором будет работать ваше программное обеспечение). Если размер вашего блока составляет 4 КБ, то (истинный) минимум, который ваш жесткий диск может получить за один раз, составляет 4096 байт. В вашем случае, если вам действительно нужно 5 символов каждые 1000, то, если бы вы сделали это со ВСЕМ дисковым вводом-выводом, вы бы, по сути, перечитывали один и тот же блок 4 раза и выполняли 3 поиска между ними (ДЕЙСТВИТЕЛЬНО НЕ ЭФФЕКТИВНО).
Мое личное убеждение состоит в том, что вы могли бы (если хотите быть эффективными) в своем коде попытаться понять, каков размер блока используемого вами диска, а затем использовать это число размера, чтобы узнать, сколько байтов за раз вы используете. следует вывести в ОЗУ. Таким образом, вам не нужно было бы иметь ОГРОМНЫЙ буфер ОЗУ, но в то же время вам не нужно было бы искать, вы бы не тратили (или не выполняли) какие-либо дополнительные чтения.
ЭТО САМОЕ ЭФФЕКТИВНОЕ. Я не думаю, что он самый эффективный, но он может быть достаточно хорош для нужной вам производительности, кто знает. Я действительно думаю, что даже если головка чтения находится там, где вы хотите, если вы выполняете алгоритмическую работу в середине каждого прочитанного блока, а не читаете весь файл сразу, вы потеряете время в ожидании следующее вращение приводных дисков. Принимая во внимание, что если вы должны были прочитать все сразу, диск должен иметь возможность выполнять последовательное чтение всех частей файла одновременно. Опять же, не так просто, как если бы ваш файл действительно состоял из более чем 1 блока на вращающемся диске, вы можете пострадать, ЕСЛИ ваш диск не был дефрагментирован, поскольку ему, возможно, придется выполнять случайный поиск только для того, чтобы перейти к следующему блоку.
Извините за длинный ответ, но, как обычно, в вашем случае нет простого ответа.
Я действительно думаю, что общая производительность ВОЗМОЖНО будет лучше, если вы просто прочитаете весь файл сразу. Нет никакого способа убедиться в этом, так как каждая система будет иметь разные параметры настройки своего привода и т. д.
person
trumpetlicks
schedule
11.06.2012