У нас есть приложение, которое содержит большое количество объектов в нескольких Dictionary
s, некоторые из которых постоянно растут в течение всего жизненного цикла приложения (торговое приложение с множеством инструментов и постоянно растущими заказами/сделками).
У нас возникают проблемы с OutOfMemoryException
из-за фрагментации кучи больших объектов.
Чтобы противостоять этому, я попытался написать "большой" словарь, который реализован как двухуровневый словарь, где все листовые словари недостаточно велики для распределения на LOH. Я использовал последовательный алгоритм хэширования, чтобы избежать необходимости перефразировать весь словарь, когда одно ведро становится слишком большим. Согласованный хеширующий "круг" представляет собой TreeDictionary
из библиотеки коллекций C5.
Мой вопрос: есть ли какие-нибудь лучшие структуры данных (или, возможно, лучшие реализации того, что я описал) для С#?
Обновление
Это реализация для "большого" словаря: https://gist.github.com/956621
Я понимаю, что это не безошибочно, так как в спецификации не указано ни порог кучи LOH, ни размер каждого словаря или алгоритма масштабирования. Однако в настоящее время это лучшее, что я могу придумать, чтобы избежать взрыва приложения в середине дня.