Другим важным отличием является то, что Hashtable является потокобезопасным. Hashtable имеет встроенную безопасность потоков для нескольких считывателей / писателей (MR / SW), что означает, что Hashtable позволяет ОДНОМ записывающему устройству вместе с несколькими считывателями без блокировки.
В случае словаря нет безопасности потока; если вам нужна безопасность потоков, вы должны реализовать собственную синхронизацию.
Для уточнения:
Hashtable обеспечивает некоторую потокобезопасность благодаря свойству Synchronized
, которое возвращает потокобезопасную оболочку вокруг коллекции. Оболочка работает, блокируя всю коллекцию при каждой операции добавления или удаления. Поэтому каждый поток, который пытается получить доступ к коллекции, должен ждать своей очереди, чтобы взять одну блокировку. Это не масштабируется и может привести к значительному снижению производительности для больших коллекций. Кроме того, дизайн не полностью защищен от условий гонки.
Классы коллекций .NET Framework 2.0, такие как List<T>, Dictionary<TKey, TValue>
и т. Д., Не обеспечивают никакой синхронизации потоков; код пользователя должен обеспечивать всю синхронизацию при одновременном добавлении или удалении элементов в нескольких потоках
Если вам нужна безопасность типов, а также безопасность потоков, используйте классы одновременных коллекций в .NET Framework. Дальнейшее чтение здесь .
Дополнительным отличием является то, что когда мы добавляем несколько записей в Словаре, сохраняется порядок, в котором они добавляются. Когда мы получим элементы из словаря, мы получим записи в том же порядке, в котором мы их вставили. Принимая во внимание, что Hashtable не сохраняет порядок вставки.