Проблема, на мой взгляд, заключается в том, что вам нужна структура данных, организованная по двум осям - ваш уникальный ключ и время.Если вы можете обменять пространство на время, я бы предложил разные структуры данных (заключенные в ваш собственный класс для обеспечения согласованности) для каждой.Возможно, вы захотите использовать SortedList для отслеживания ваших данных, ориентированных на ключи.Я полагаю, что оно основано на красно-черном дереве и должно иметь характеристики, которые вы хотите найти при поиске по ключу.В качестве альтернативы, если они вам не нужны, упорядоченные по ключу, вы можете использовать простой словарь.
Для поддержки поиска по дате вы можете захотеть иметь B-дерево (одна реализация, обратите внимание, у меня нет ').t протестировал его: http://blog.daisley -harrison.com / blog / post / NET-Generic-BTree-Library-and-Source-Code.aspx ) с указанием даты.Убедитесь, что он поддерживает дубликаты ключей, поскольку они могут быть не уникальными.Он может содержать либо копию данных, либо просто ключ, связанный с этой отметкой времени.
Все эти структуры имеют log (n) или, что еще лучше, сложность для поиска.Перечисление элементов между двумя датами должно быть довольно эффективным, с наилучшей производительностью при использовании комбинации B-Tree / Dictionary.