Я пишу небольшую библиотеку ввода / вывода, чтобы помочь с большим (хобби) проектом. Часть этой библиотеки выполняет различные функции над файлом, который читается / записывается с помощью объекта FileStream
. На каждом StreamReader.Read(...)
проходе
Я запускаю событие, которое будет использоваться в главном приложении для отображения информации о прогрессе. Обработка, выполняемая в цикле, является распределенной, но не слишком трудоемкой (например, это может быть просто простая копия файла или шифрование ...).
Мой главный вопрос: какой размер буфера памяти лучше использовать? Думая о расположении физических дисков, я мог бы выбрать 2 КБ, который бы покрывал размер сектора компакт-диска и представлял собой кратное число секторов жесткого диска в 512 байт. Выше дерева абстракции вы можете использовать больший буфер, который мог бы одновременно читать весь кластер FAT. Я понимаю, что с сегодняшними ПК я мог бы выбрать более требовательный к памяти вариант (например, пару МиБ), но затем я увеличиваю время между обновлениями пользовательского интерфейса, и пользователь воспринимает менее отзывчивое приложение.
Кроме того, в конечном итоге я надеюсь предоставить интерфейс, аналогичный файлам, размещенным на серверах FTP / HTTP (через локальную сеть / fastish DSL). Каков будет наилучший размер буфера памяти для них (опять же, «наилучший» компромисс между воспринимаемой отзывчивостью и производительностью)?