Какова лучшая структура для реализации Identity Map?

Хотя DataTable - это проблема с памятью, разве DataTable не будет лучшим выбором для реализации и IdentityMap, если набор объектов очень большой, так как время поиска равно O(1)?

Обновить

Если я решу использовать IDictionary, жертвую ли я скоростью при извлечении своих объектов?

2 ответа

Решение

Любой из Dictionary<,>, SortedList<,> или же SortedDictionary<,> было бы очевидным выбором - но обратите внимание, что сортировка становится проблемой здесь... Dictionary<,> не гарантирует какой-либо конкретный заказ; два других порядка по ключам, а не порядок вставки.

Также обратите внимание, что словарь не очень хорошо работает с привязкой данных. Может быть предпочтительнее создать что-то вроде Collection<T>, но инкапсулировать Dictionary<,> для поиска. Все зависит от сценария, конечно.

Больше информации о производительности и различиях между SortedList<,> и т.д. можно найти здесь.

Я был бы более склонен использовать собственный класс, поддерживаемый Dictionary, чем DataTable. Предположительно это будет построено поверх слоя доступа к данным, который может использовать LINQ или DataTables и т. Д. Для доступа к реляционным данным, но если объект доступен на пользовательской карте, вы по крайней мере избежите необходимости восстанавливать его из реляционного данные.

Другие вопросы по тегам