Безопасно ли сохранять С# Filestream в течение длительного периода времени?

Внутри моего веб-сервиса я открываю файл в файл на локальном диске. Я держу это на всю жизнь службы. Для каждого запроса, который входит, я использую filestream для чтения диска. Я делаю это, чтобы избежать повторного открытия фильтра для каждого запроса. Задержка этого пути критическая (должно быть менее нескольких мс). Я использую SSD для хранения времени ввода-вывода на диске до 0,1 мс или менее.

Может ли filestream "плохо работать" (становится недействительным) в течение длительных периодов времени (дней). Безопасно ли просто повторно открывать поток при каждом запросе? Если мне нужно снова открыть, что накладные расходы на постоянное повторное открытие фильтра несколько раз в секунду?

Ответ 1

Безопасно держать файлы открытыми до тех пор, пока вам нужно.

Это хорошо для вашего дела или нет - вам нужно решить сами. Повторное открытие файла не должно быть медленным (даже на обычном диске), но вам нужно попытаться измерить себя как никто, но вы знаете свои точные цели производительности.

Ответ 2

Единственное беспокойство, которое я бы оставил открытым для файла, - это то, что приложение по какой-то причине потерпело неудачу и не могло восстановить его текущее местоположение, чтобы закрыть поток; CreateFile точка входа в KERNEL32, которая используется для открытия файла, делает следующее утверждение:

Когда приложение завершено с использованием дескриптора объекта, возвращаемого CreateFile, используйте функцию CloseHandle, чтобы закрыть дескриптор. Это не только освобождает системные ресурсы, но может оказывать более широкое влияние на такие вещи, как совместное использование файла или устройства и передача данных на диск. В этой теме, в зависимости от ситуации, указываются особенности.

Поэтому я считаю, что гораздо более целесообразно открывать и закрывать FileStream каждый раз.