我的一个类用hashtable保存语言,程序类似下面
class l{
    private Hashtable lang = new Hashtable();
    l(){
        lang.add("en", g("en"));
        lang.add("zh", g("zh"));
        lang.add("big5", g("big5"));
    }
    Hashtable g(string langName){
        Hashtable tmp = new Hashtable();
        .....
        return tmp;
    }
    string get(string langVarName,string langName){
        //这种转换效率高么?有更好的办法么?
        Hashtable tmp = (Hashtable)lang[langName];
        return (string)tmp[langVarName];        
    }
}我 不是 想问多语言怎么实现,而是想知道hashtable的效率怎么样,怎样提高效率.
谢谢.

解决方案 »

  1.   

    hashtable效率应该是不错的。
    如果楼主不放心,可以自己实现一下IEqualityComparer接口,使用自己的比对方法,然后用这个实例来初始化hashtable。
      

  2.   

    建议使用Dictionary<T,V>,本人经过测试,这个比hashtable高。
    http://topic.csdn.net/u/20081106/12/986048f8-afb7-41f2-964b-7a5cb739116d.html
      

  3.   

    效率应该不错.
    要不然 MicroSoft 也会,在视图状态的时候自己都采用HashTable了。
      

  4.   

    Hashtable 是线程安全的,可由多个读取器线程或一个写入线程使用。多线程使用时,如果任何一个线程执行写入(更新)操作,它都不是线程安全的。若要支持多个编写器,如果没有任何线程在读取 Hashtable 对象,则对 Hashtable 的所有操作都必须通过 Synchronized 方法返回的包装完成。从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使一个集合已进行同步,其他线程仍可以修改该集合,这将导致枚举数引发异常。若要在枚举过程中保证线程安全,可以在整个枚举过程中锁定集合,或者捕捉由于其他线程进行的更改而引发的异常。
      

  5.   

    Dictionary 泛型类提供了从一组键到一组值的映射。字典中的每个添加项都由一个值及其相关联的键组成。通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictionary 类是作为一个哈希表来实现的。注意 
    检索速度取决于为 TKey 指定的类型的哈希算法的质量。 
     只要对象用作 Dictionary 中的键,它就不能以任何影响其哈希值的方式更改。使用字典的相等比较器比较时,Dictionary 中的任何键都必须是唯一的。键不能为空引用(在 Visual Basic 中为 Nothing),但是如果值类型 TValue 为引用类型,该值则可以为空。Dictionary 需要一个相等实现来确定键是否相等。可以使用一个接受 comparer 参数的构造函数来指定 IEqualityComparer 泛型接口的实现;如果不指定实现,则使用默认的泛型相等比较器 EqualityComparer.Default。如果类型 TKey 实现 System.IEquatable 泛型接口,则默认相等比较器会使用该实现。Dictionary 的容量是 Dictionary 可以包含的元素数。在此实现中,Dictionary 的默认初始容量为 3;但该默认值可能在 .NET Framework 的未来版本中更改。当向 Dictionary 中添加元素时,将通过重新分配内部数组来根据需要自动增大容量。对于枚举而言,字典中的每一项都被视为一个表示值及其键的 KeyValuePair 结构进行处理。项返回的顺序未定义。
      

  6.   

    建议使用泛型.
    但是如果是VS2003 的话建议使用 as 如:Hashtable tmp = (Hashtable)lang[langName]; 
            return (string)tmp[langVarName];  ->Hashtable tmp = lang[langName] as Hashtable; 
            return tmp[langVarName] as string; 
      

  7.   

     7楼说的很好  不怎么理解  up   用Dictionary <T,V> 可以
      hashtable效率不错