Изменения документа Tools.Collections
Редактировал(а) Alexandr Fokin 2023/01/11 15:18
отредактировано Alexandr Fokin
на 2020/06/14 12:13
на 2020/06/14 12:13
отредактировано Alexandr Fokin
на 2020/06/14 11:55
на 2020/06/14 11:55
Изменить комментарий:
К данной версии нет комментариев
Комментарий
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,46 +1,1 @@ 1 1 Репозиторий: [[git repo>>https://git.denhome.ru/Repository/Detail/51601bfd-6f2c-40d8-88bb-f2724b294431]] 2 - 3 -Данный проект реализует 2 коллекции. 4 -Коллекцию представляют из себя Key Value хранилище, являются потокобезопасными. (В основе лежит ConcurrentDictionary) 5 -Для обеспечения оптимистичной блокировки в LinkStorage используется специальный item с полем Stamp, по которому проверяется не был ли изменен элемент во время операции. 6 -(Подробнее смотри ConcurrentDictionary) 7 - 8 -**1) LinkStorage** 9 -Интерфейс: 10 - 11 -AddLink 12 -TKey key - ключ 13 -Func<TKey, TData> addFactory - фабрика для нового значения 14 -Func<ILinkItem<TKey, TData>, TData> updateFactory - фабрика для обновления существующего значения 15 - 16 -Если по ключу нет записи, то 17 - добавить запись 18 - счетчик записи = 1 19 - вызвать addFactory(если не null) и заполнить value.Data 20 -Иначе если по ключу есть запись, то 21 - Увеличить счетчик на 1 22 - вызвать updateFactory(если не null) и обновить value.Data 23 - 24 - 25 -RemoveLink 26 -TKey key - ключ 27 -Func<ILinkItem<TKey, TData>, TData> updateFactory - фабрика для обновления существующего значения 28 - 29 -Уменьшить счетчик на 1 30 -вызвать updateFactory(если не null) и обновить value.Data 31 -Если значение счетчика <= 0 32 - То удалить запись 33 - 34 - 35 -**2) ObjectLinkStorage** 36 -Данная коллекция оборачивает LinkStorage, добавляя к контракту сущность объекта, ссылающегося на запись. 37 -Все объекты, ссылающиеся на запись храняться в ImmutableHashSet. 38 - 39 -При AddLink, помимо увеличения счетчика в HashSet записи добавляется ссылающийся объект. 40 -При RemoveLink, помимо уменьшения счетчика из HashSet удаляется ссылающийся объект. 41 - 42 -Ссылки: 43 -https://wiki.denhome.ru/bin/view/Разработка/NET/C%23/ConcurrentDictionary/ 44 -https://stackoverflow.com/questions/39679779/how-to-achieve-remove-if-functionality-in-net-concurrentdictionary 45 - 46 -