Я реализую кеш функции, которая называется сотни миллионов раз. Размер кеша составляет десятки миллионов единиц. В настоящее время он реализуется с использованием Dictionary
, и поиск в нем занимает значительное количество времени.Можно ли получить ссылку на словарь в C#?
Возможно ли получить ссылку на всю пару в Dictionary
, а не только на значение, поэтому я могу проверить, существует ли значение, проверить его (и, возможно, обновить), если он использует один поиск ?
В настоящее время у меня есть что-то вроде этого:
int val;
if (cache.TryGetValue(key, out val))
if (val < newVal) cache[key] = newVal;
else return val;
else
cache.Add(key, newVal);
Я хотел бы получить это:
Pair pair = cache.GetPair(key);
if (pair != null)
if (pair.Value < newVal) pair.Value = newVal;
else return pair.Value;
else
cache.Add(key, newVal);
Если есть альтернативная структура данных, которая позволяет это, я был бы рад услышать об этом тоже.
Заранее благодарен!
«поиски в нем принимают значительное количество времени." В самом деле? Что такое «значительное количество времени»? Секунды? Миллисекунды? Микросекунды? Вы уверены, что правильно реализовали «GetHashCode» и «Equals»? Можете ли вы разместить свой код? –
'KeyValuePair' неизменен, поэтому это не сработает. Кроме того, словарный поиск должен быть O (1). Если это действительно занимает много времени, что-то не так. – Blorgbeard
Единственный поиск - O (1) и быстрый. Но миллионы поисковых запросов имеют значительную совокупную стоимость. Обычные предупреждения о преждевременной оптимизации здесь не применяются. – usr