Лучший способ хранить текстовые данные для потоковой передачи

Я реализую кеш, который будет хранить содержимое текстовых файлов на веб-сервере. При поступлении входящего запроса содержимое файла будет передано из кеша.

Как правильно хранить содержимое файлов в узлах кэша - следует ли использовать строку или байтовый массив? Пожалуйста, обсудите плюсы и минусы каждого варианта. И есть ли другой лучший вариант?

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 (и все его члены) статическим.

Другие вопросы по тегам