最近用hashtable时发现,C#中的hashtable中的key值和value值都是object的,不知道能否强制为是值类型的?如果不能的话是不是会大大降低效率?另外如果不设最大值的话,hashtale加几十万条会出现什么情况?在十万级的hashtale中取值的话。假设我做一个windows服务提供这个hashtale的检索服务。普通的pcserver大约能检索几次。另外,大数量级的检索是用两级hashtable好还是在一个大hashtable中检索来的快?请各位高手不吝赐教。分不多见谅。

解决方案 »

  1.   

    Hashtable 是线程安全的,可由多个读取器线程或一个写入线程使用
    数据量不大Dictionary、SortedDictionary、SortedList在搜索上都差不多
    如果数据量非常大,应该使用SortedDictionary
      

  2.   


    就是要使用多线程,所以用hashtable另外写线程也是多个,我可以用自同步hashtable保证删改,添加的话,还是要加锁。十万条记录算大还是小?
      

  3.   


    Hashtable、Dictionary、SortedDictionary、SortedList另外问一下。除Hashtable外,其它几个是线程安全的吗,我没有太用过。
      

  4.   

    多线程使用时,如果任何一个线程执行写入操作,都不是线程安全的。若要支持多个编写器,没有任何线程在读取 Hashtable 对象,则对 Hashtable 的所有操作都必须通过 Synchronized 方法返回的包装完成。
      

  5.   

    最近用hashtable时发现,C#中的hashtable中的key值和value值都是object的,不知道能否强制为是值类型的?如果不能的话是不是会大大降低效率?另外如果不设最大值的话,hashtale加几十万条会出现什么情况?在十万级的hashtale中取值的话。假设我做一个windows服务提供这个hashtale的检索服务。普通的pcserver大约能检索几次。另外,大数量级的检索是用两级hashtable好还是在一个大hashtable中检索来的快?不能强制为值类型  hashtable 键和值都是object 操作的时候会发生装箱拆箱
    如果键和值都是单一类型  你可以考虑使用 Dictoinary
      

  6.   

    不知道能否强制为是值类型的?可以啊,你把值类型转为object就OK了
      

  7.   


    我就是用的这个Synchronized自同步包装,但看到有文档上介绍说在进行多线程添加时还是会出错,那个作者建议多线程添加时要加锁。不知道Dictionary、SortedDictionary、SortedList这几个支不支持自同步包装。另外hashtable中的检索的Hash具有O(1)的效率好象是几个中最高的。不知道SortedDictionary的效率是如何的,我在内存中存入的表数据不会超100万条,都是简单的string型,所以不太用在意内存消耗。但对插入操作还是有一定的效率要求的。
      

  8.   

    我也当回实验党以下是测试结果,一百万条纪录的添加和检索测试。结果是dictionary性能最好。
    看了有介绍说hashtable是派生自dictionary。看int型的测试结果,可以感觉hashtable的拆装箱费时不少。现在有点想用dictionary了,可它好象不是线程安全的。不知道那位高人能帮咱做个dictionary的Synchronized包装方法,或者介绍下实现过程,要是让咱自己加锁可有点过时啊。==============================================当key value都是int的时候hashtable(默认因子) 
    添加 1~1000000 256ms
    查key  1~1000000 359msdictionary
    添加  1~1000000 81ms
    查key  1~1000000 24mssortedDictionary
    添加 1~1000000 747ms
    查key  1~1000000 576ms当key vlaue都是string的时候hashtable(默认因子) 
    添加 1~1000000 1460ms
    查key  1~1000000 1798msdictionary
    添加  1~1000000 938ms
    查key  1~1000000 324mssortedDictionary
    添加 1~1000000 5598ms
    查key  1~1000000 3361ms