情况是有一个号码池(存放号码的集合估计10万个左右),用户提交号码时判断该号码是否在池里,在就过滤,我是把过滤池的号码村在了hashtable,然后判断用户提交的号码是否在hashtable里面,这样处理小数据还可以,但用户访问过率时系统会很慢,
   求更快的方法,希望能给出具体代码,用完成端口或线程.....

解决方案 »

  1.   

    hashtable
    用泛型,甚至用数据库还好过。
      

  2.   

    如果只是 判断号码 是否存在 不必要用hashtable数组即可如果是要根据 userID 来取号码 才使用hashtable
    不管那种
    楼主可以 将 号码 按段分解 使用多个hashtable(第一种情况用数组即可)
    比如 130 133 135 139 在你的号码中是存在的 先去查这个段记录是否存在,
    再往下找后面的段 , 具体分组看情况
      

  3.   

    GXY2005(☆☆☆☆☆樱之花要嫁偶)  :号码没什么规律,前期是这么想的,不过具体实现没能实现,是不是要用到完成端口啊
      

  4.   

    Nick_Nick(统统..都给..我..密码) :
    你说的二分法查找如何实现啊,能说的再具体一下吗
      

  5.   

    不管那种
    楼主可以 将 号码 按段分解 使用多个hashtable(第一种情况用数组即可)
    比如 130 133 135 139 在你的号码中是存在的 先去查这个段记录是否存在,
    再往下找后面的段 , 具体分组看情况
    还是,hertcloud(·£孙子兵法£·) 的办法试试
      

  6.   

    谢谢大家 我先按,hertcloud(·£孙子兵法£·) 的意见试下,
    希望大家继续提供实验方法,多提意见
      

  7.   

    慢的原因一般来说是内存占用太大了,你可以考虑用Xml来存储这些号码,然后用占内存很小的XmlReader来分析这个Xml,这样可能会效率会提高很多.(以前有过这种类似做法).
      

  8.   

    个人意见:
    找一下号码的规律然后创建索引:如果你的号码不是类似GUID的毫无规律的东西,就一定有规律,比如身份证号码可以按照地区,手机号可以按号段等等,按照这个创建索引。
    放弃HashTable用数组:HashTable存对象,每一次都要装箱、拆箱,这个操作比较耗时,再者HashTable是Key-Value成对的,对于存储号码也没有意义。我估计你用HashTable是因为它有类似HasValue的属性。如果需要Key-Value模式的,可以考虑专为字符串设计的StringDictionary。不过你这个,我觉得数组更好些。
      

  9.   

    10W这个数量级上绝对是Hashtable最快。如果lz想要优化,把号码转成long型。
      

  10.   

    但是数组肯定会比Hashtable快N多
      

  11.   

    StringDictionary是没有范型时候的产物,基本相当于Dictionary<string,string>。
    Dictionary是实现了范型的Hashtable。
      

  12.   

    但是数组肯定会比Hashtable快N多---------------------为什么?
      

  13.   

    大家的数据结构都是怎么学的hashtable 是最快的,前面已经有几位提到了。
      

  14.   

    估计是getcode()写得不好,碰撞得太厉害
      

  15.   

    我用了hertcloud(·£孙子兵法£·)说的办法 快了50被
      

  16.   

    在问下 我用 hertcloud(·£孙子兵法£·)  怎么写成通用的啊
    就是号段可能有变化 但程序不需要改变
      

  17.   

    想知道lz一开始怎么用hashtable的?
      

  18.   

    hashtable ht = new hashtable();
    ht.add(key,value);
      

  19.   

    hashtable ht = new hashtable();
    ht.add(key,value);key是什么?value是什么?
    你怎么判断号码在不在ht里?
      

  20.   

    ht.ContainsValue(value)晕了,哪有这样用的。用ContainsKey()