Код для теста ниже:
я есть кеш, который я реализую с помощью ConcurrentDictionary. Данные, которые мне нужно хранить, зависят от 5 параметров. Таким образом, метод для получения его из кэша: (я показываю только 3 параметра здесь для простоты, и я изменил тип данных, чтобы представлять CarData для ясности)
public CarData GetCarData(string carModel, string engineType, int year);
Интересно, какой тип ключа будет лучше использовать в моем ConcurrentDictionary, я могу сделать это так:
var carCache = new ConcurrentDictionary<string, CarData>();
// check for car key
bool exists = carCache.ContainsKey(string.Format("{0}_{1}_{2}", carModel, engineType, year);
Или вот так:
var carCache = new ConcurrentDictionary<Tuple<string, string, int>, CarData>();
// check for car key
bool exists = carCache.ContainsKey(new Tuple(carModel, engineType, year));
Я не использую эти параметры вместе в любом другом месте, поэтому нет никакого оправдания для создания класса, просто чтобы держать их вместе.
Я хочу знать, какой подход лучше с точки зрения производительности и ремонтопригодности.