многопоточное добавление данных в словарь
Dictionary не потокобезопасен, по тому при обращении к нему из нескольких потоков нужно синхронизировать потоки (желательно при любых обращениях)
Лучше использовать ConcurrentDictionary - в нём уже решены потенциальные проблемы при конкурентном доступе (например попытке изменить запись, которая уже удалена в другом потоке или удаление удалённой, или создании уже существующей, или чтении несуществующей/удалённой)
Interlocked exchange лучше смотреть по месту, может подойдёт, а может нет.
На счёт инмемори базы тоже следует посмотреть на конкретную задачу.
UPD: ещё как хорошее решение звучит использование System.Threading.Channels, раз задача стоит накапливать записи и батчем их отправлять в СУБД.
Так мы гарантированно решаем проблему гонок, так как фактически менять данные будет только один поток