Очень похожий вопрос также был задан здесь на SO, если вы заинтересованы, но, как мы увидим, принятый ответ на этот вопрос не всегда имеет место (и это никогда не касается моего шаблона использования приложения).
Код определения производительности состоит из конструктора FileStream (для открытия файла) и хэша SHA1 (реализация каркаса .Net). Код в значительной степени является версией С# того, что было задано в вопросе, который я связал с выше.
Случай 1: Приложение запускается либо в первый раз, либо в течение N-го времени, но с другим целевым файлом. Теперь приложению предлагается вычислить значения хэша в файлах, которые ранее не были доступны.
Случай 2: Теперь приложение полностью завершено и снова запустилось, попросив вычислить хэш в тех же файлах:
Проблема
Мое приложение всегда используется Случай 1. Его никогда не попросят перекомпилировать хэш на файл, который уже был посещен один раз.
Итак, мой способ определения скорости - FileStream Constructor! Можно ли что-то сделать, чтобы ускорить этот вариант использования?
Спасибо.
P.S. Статистика была собрана с использованием профайлера JetBrains.
Файловая система и контроллер диска будут кэшировать недавно просмотренные файлы/сектора.
Шаг определения скорости - это чтение файла, а не создание объекта FieStream, и совершенно нормально, что он будет значительно быстрее во втором запуске, когда данные находятся в кеше.
Вам следует попытаться использовать собственный FILE_FLAG_SEQUENTIAL_SCAN
, вам нужно будет вывести CreateFile
, чтобы получить дескриптор и передать это FileStream
FileOptions
делает это в потоке, если вы передаете его FileOptions.SequentialScan
? РЕДАКТИРОВАТЬ: да, он просматривает справочный источник, в котором параметр enum превращается в dwFlagsAndAttributes
CreateFile
, а значение enum равно 0x08000000
что совпадает со значением FILE_FLAG_SEQUENTIAL_SCAN
FileStream
, что существуют тонны директив препроцессора, и даже в самых простых путях инициализация кажется довольно сложной. Возможно, вы захотите указать, с каким конкретным конструктором у вас возникли проблемы и как выглядит ваша среда, и, надеюсь, люди (намного) умнее меня могут вам помочь.