【发布时间】:2014-05-16 14:27:59
【问题描述】:
存储客户端 IP 地址列表的最佳数据结构是什么?
我认为对内存大小或查找速度没有任何严格的限制,因为它是一个 ip 地址过滤应用程序。
我在考虑字典,但可能它为存储唯一地址列表这样简单的东西提供了太多开销。 Hashtable 本质上也是基于字典的。
数组不好,因为即使存储少量地址也必须分配太多空间。 列表不是唯一的。
【问题讨论】:
-
使用列表。 Ovveride list.Add 函数在将 ip 添加到列表之前进行检查以保持唯一性。即 if(!list.contains(this_ip)) list.Add(this_ip)
-
我认为您高估了哈希表所涉及的开销。
-
@Dukeling:上次我进行分析时,
HashSet<T>每个条目需要大约 24 个字节。见blog.mischel.com/2008/05/21/more-on-net-collection-sizes -
答案在很大程度上取决于您所谈论的 IP 地址数量。如果是几十个,
List<T>或数组可能就可以了。高达几百万,Dictionary<TKey, TValue>或HashSet<T>将很难被击败。这还取决于您是否希望经常添加内容,或者列表是否相对静态。
标签: c# data-structures