использование хэш-таблицы в C Sharp широко - PullRequest
2 голосов
/ 30 марта 2011

В моем проекте, который является своего рода TCP-сервером, мне нужно отслеживать множество объектов, которые будут использоваться в глобальной области видимости.Я пристрастился к хеш-таблице и в настоящее время я использую около 10 хеш-таблиц в своем проекте, которые будут хранить различные виды объектов.

Мой вопрос: все в порядке?я знаю, что это довольно большая структура данных, но она делает мою работу очень легкой, вместо того, чтобы искать какую-то другую альтернативу.Например, у меня есть много групп текстовых полей, которые мне нужно отслеживать.поэтому я положил их все в хеш-таблицу и использую их, как мне нравится.

Является ли такой подход приемлемым и нормальным способом программирования при работе с большим многопоточным приложением.

Ответы [ 3 ]

7 голосов
/ 30 марта 2011

Это не ясно из вашего примера, но звучит так, как будто вы используете глобальные хеш-карты для доступа к нужным объектам (таким как текстовое поле в интерфейсе) из любой точки вашей программы.

a) Подобный глобальный доступ не является хорошей практикой, и тем более с объектами интерфейса . К ним следует обращаться только из интерфейсного модуля, ваш сервер TCP не должен заботиться об этом.

b) Правильный способ размещения объектов в «функциональной группе» заключается в наличии надлежащего класса, а не 5-10 хеш-карт . Почему на практике? Рассмотрим эти два подхода (в псевдокоде, похожем на python):

# Interface is a hash-map of interface objects, like text-boxes. 'status' is the key
# in the map for one of those.
Interface['status'].setText("New status!")
# vs:
# Interface is a proper object with its own class, that handles the interface. It has
# all our text-boxes "inside" of it.
Interface.updateStatus("New status!")

Теперь, скажем, вы передумали и хотите представить статус рисунка, а не текстового поля. Со вторым подходом это просто: вы просто соответствующим образом настраиваете GUI и изменяете поведение метода updateStatus!

При первом подходе у вас теперь есть беспорядок обращений hahsmap к текстовому полю, которое больше не существует, распространяется по всему вашему коду.

Это гораздо более общая практика, чем просто хеш-карты или глобальные объекты - речь идет о работе с объектами, которые имеют четко определенные интерфейсы и которые могут изменяться внутри системы без влияния на остальную часть программы .

1 голос
/ 30 марта 2011

Большим преимуществом использования хеш-таблицы является то, что вы можете хранить данные любого типа. Внутренне HashTable использует тип словаря.

Если все данные, которые вы храните внутри хеш-таблицы, относятся к одному типу, я бы предложил вам использовать универсальный тип.

Словарь или Even List <,> для повышения производительности.

0 голосов
/ 30 марта 2011

Я не вижу проблем с этим, пока ваше потребление памяти низкое. После этого вы должны перенести хэш-таблицу на диск. Либо используйте полноценную реляционную базу данных, либо просто используйте одно из хранилищ значений ключей. Ваш выбор.

...