это был скорее концептуальный вопрос, но мне было интересно, какова лучшая структура данных C # для структуры, подобной кешу. Я объясню, что я ищу.
Я делаю игру, которая использует спрайты для графики. Спрайты основаны на изображениях (изображения библиотеки SFML, а не стандартные изображения C #, но я не думаю, что это действительно имеет значение). Эти изображения должны быть загружены из файла на диске, и это может стать дорогостоящим (по времени), когда нужно быстро создать много спрайтов. Чтобы уменьшить часть этого времени загрузки, я хочу использовать структуру, похожую на cahce, для хранения файлов изображений и времени их последнего обновления (я буду использовать это время обновления, чтобы определить, когда удалять файлы из кэша). Кэш будет проиндексирован с использованием комбинации имени спрайта и нескольких других деталей. этот индекс будет соответствовать структуре, как показано ниже:
struct ImageEntry
{
Image image;
TickCount lastupdate;
TickCount evictionTime;
}
Когда игра запрашивает спрайт, запрос отправляется менеджеру контента, который будет искать совпадения в структуре кэша. Если совпадение найдено, структура, подобная выше, будет найдена. Менеджер контента будет использовать изображение для создания спрайта, а затем обновит время последнего обновления до времени, когда структура была вызвана. Если совпадение не найдено, будет создана новая структура и изображение будет загружено из файла изображения (и использовано для создания спрайта). Время последнего обновления будет установлено на текущее время. Время вытеснения устанавливается на основе предварительно определенной константы или необязательного компонента в запросе.
Теперь вот что мне нужно сделать: периодически мне нужно бегать по всему кешу, сравнивать последние обновления каждой структуры с текущим игровым временем. Если разница между этими двумя значениями превышает время удаления, я хочу удалить запись struct из кэша. Кроме того, если запрос спрайта выдает новую структуру, а размер кэша превышает предварительно определенное значение, мне нужно найти наименее недавно обновленную структуру и удалить ее, чтобы освободить место для новой структуры.
По сути, я ищу идеальную структуру данных, которая имеет быстрый поиск для индексации ключей и быструю итерацию для времени обновления / исключения из-за переполнения размера.
Создание словаря было моей первой мыслью, которая, безусловно, быстро индексируется, но, учитывая, что я собираюсь удалять элементы и добавлять новые довольно регулярно, я беспокоюсь о производительности. Список> может работать, но тогда поиск займет время.
Для справки, я, вероятно, собирался ограничить размер изображения примерно 30-40 снимками за раз, и он колеблется от 2 до 500 кб, а время выселения обычно составляет около 6 минут. Я хотел бы иметь возможность проверять выселение хотя бы каждые 1-2 секунды
Мне было интересно, сможет ли кто-нибудь дать представление о наилучшем типе структуры данных, который можно использовать для этого.
Спасибо