У нас есть большое приложение Winforms C #, которое в основном является интерфейсом для некоторых баз данных (CRUD), и я пытаюсь реализовать его в кеше памяти для бизнес-объектов.
Что-то вроде:
List<Customer> customerCache; // Loaded during app. startup
Я уже создал некоторый код, чтобы поддерживать кэш в актуальном состоянии с базой данных. Этот код все время выполняется в отдельном потоке и работает очень хорошо.
Моя проблема заключается в том, что в зависимости от размера кэша, быстрее сделать 'select * from customer, где id = x' в базе данных, чем циклически проходить через кэш с помощью foreach (foreach Customer cmr в customerCache), чтобы найти этот конкретный объект ...
Есть ли способ быстрого поиска определенных объектов в моем кеше? Я собирался попробовать какой-нибудь алгоритм или изменить тип своей коллекции, но я был бы признателен выслушать ваши предложения.
Обратите внимание, что у нас есть несколько «List xxxCache», и все быстро (для маленького N, конечно). Но когда число кэшируемых itens увеличивается (> 3000 обычно), его быстрее считывать из базы данных.
Какой лучший способ перебрать мои кэшированные элементы, чтобы найти конкретный? Все бизнес-элементы наследуются от общего предка и имеют свойство ID (целое, уникальное).
Извините за мой плохой английский, это не мой основной язык.
С наилучшими пожеланиями,
Привет из Бразилии.