Лучший способ хранить текстовые данные для потоковой передачи
Я реализую кеш, который будет хранить содержимое текстовых файлов на веб-сервере. При поступлении входящего запроса содержимое файла будет передано из кеша.
Как правильно хранить содержимое файлов в узлах кэша - следует ли использовать строку или байтовый массив? Пожалуйста, обсудите плюсы и минусы каждого варианта. И есть ли другой лучший вариант?
1 ответ
Это текстовые файлы, поэтому имеет смысл хранить содержимое в текстовом формате.
Поэтому я бы предложил хранить содержимое файла в виде строк, каждую из которых вы можете заполнить вызовом File.ReadAllText()
,
Таким образом, доступ к кешу даст тот же результат, как если бы файл загружался как текст.
Самая разумная коллекция для самого кэша, вероятно, что-то вроде ConcurrentDictionary<string,string>
, который вы можете отключить имя файла (или другой уникальный идентификатор для файла, который вы загружаете).
Типичная реализация файлового кэша может быть такой:
public class FileCache
{
private readonly ConcurrentDictionary<string,string> fileContentsCache
= new ConcurrentDictionary<string, string>();
public string ReadAllText(string filePath)
{
return fileContentsCache.GetOrAdd(filePath, File.ReadAllText);
}
}
Использование будет:
var cache = new FileCache();
var fileText = FileCache.ReadAllText(requestedFilePath);
Кеш извлекает текст (если он уже находится в кеше) или загружает файл и возвращает строку (если это не так).
Обратите внимание, что если вам нужен 1 глобальный файловый кеш для всего вашего приложения, вы можете сделать класс FileCache (и все его члены) статическим.