C# 在c语言中广泛使用哈希表

C# 在c语言中广泛使用哈希表,c#,.net,hashtable,coding-style,C#,.net,Hashtable,Coding Style,在我的tcp服务器项目中,我需要跟踪在全局范围内使用的许多对象。我对hashtable上瘾了,目前我在我的项目中使用了大约10个hashtable,它们将存储不同类型的对象 我的问题是,这样可以吗?我知道这是一个相当庞大的数据结构,但它使我的工作非常容易,而不是去寻找其他的选择。例如,我有许多组文本框需要跟踪。所以我把它们都放在一个哈希表中,并随意使用它们 在处理大型多线程应用程序时,这种方法是否是一种可接受的常规编程方法。只要内存消耗低,我看不出有什么问题。之后,您应该将哈希表迁移到磁盘。要么

在我的tcp服务器项目中,我需要跟踪在全局范围内使用的许多对象。我对hashtable上瘾了,目前我在我的项目中使用了大约10个hashtable,它们将存储不同类型的对象

我的问题是,这样可以吗?我知道这是一个相当庞大的数据结构,但它使我的工作非常容易,而不是去寻找其他的选择。例如,我有许多组文本框需要跟踪。所以我把它们都放在一个哈希表中,并随意使用它们


在处理大型多线程应用程序时,这种方法是否是一种可接受的常规编程方法。

只要内存消耗低,我看不出有什么问题。之后,您应该将哈希表迁移到磁盘。要么使用完整的关系数据库,要么只使用其中一个键值存储。您的选择。

使用哈希表的最大优点是您可以存储任何类型的数据。哈希表内部使用字典类型

如果您存储在哈希表中的所有数据都是相同类型的,我建议您使用泛型类型


字典甚至列表类型以获得更好的性能。

从您的示例中不清楚这一点,但听起来好像您正在使用全局哈希映射从程序中的任何点访问所需的对象(例如接口中的文本框)

a) 这样的全局访问不是好的做法,对于接口对象更是如此。这些应该只从前端模块访问,您的TCP服务器后端不会关心这些

b) 在“功能组”中排列对象的正确方法是使用适当的类,而不是5-10个哈希映射。为什么,实际上呢?考虑这两种方法(在Python样的伪代码中):

现在,假设您改变主意,希望将状态表示为图形,而不是文本框。第二种方法很简单:只需相应地调整GUI,并更改updateStatus方法的行为方式

使用第一种方法,您现在有一大堆对不再存在的文本框的hahsmap访问,这些访问遍布您的代码


这是一个更一般的实践,而不仅仅是哈希图或全局对象——它是关于“强”工作的对象,这些对象具有明确定义的接口,并且可以在内部不受程序影响的情况下改变< /强> .< /P>是的,这是有意义的,但是考虑一下这个场景,我有两套Tabbox控件,我所做的是创建两个哈希表并处理它们,但是当你谈到类时,c sharp不允许跨类访问GUI元素,那么我如何才能访问它们呢then@swordfish是的。但是它不允许跨线程访问GUI元素。哇,当我发表评论时,我不太清楚你的确切意思。我只是有个粗略的想法。但是我尝试了你所说的,我为所有文本框创建了一个清单类,并在该类中创建了文本框数组并将它们分组。这让我在访问它们时非常轻松。。。谢天谢地…@Kristofer我们可以使用委托进行跨线程访问,以确保这是一个安全的跨线程调用

# 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!")