C#中容器的用法实验与剖析



C#中容器的用法实验与剖析

说到容器,通常要跟泛型联系在一起。那么什么是泛型,怎么使用泛型,为什么要引进泛型。

C#中容器原来是放在System.Collections当中,这个命名空间中是不支持泛型的,如ArrayList的使用(java中支持泛型,c++中相当于vector),在《C#.net4高级程序设计》这本书中,提到了历史上使用非泛型的那些集合带来的问题。

使用非泛型带来了如下问题:

第一个问题是,使用System.Collections,System.Collections.Specialized下的类导致低性能的代码,特别是在值类型时,CLR必须执行大量的内存转换操作,这会降低运行时的执行速度。

第二个问题,这些经典的集合类不是线程安全的,因为他们是为了操作System.Object类而开发的,因此可以包含任何类型。

由于以上两个问题,.net 2.0 引入了一些全新的集合类,他们打包在System.Collections.Generic命名空间中。任何使用.net 2.0版本以上的项目都应该放弃旧的非泛型集合类,而应该使用泛型类。

      性能问题

该问题,一句话概述就是,当集合中放入值类型(C#中还有引用类型)时,需要将值类型装箱转化成引用类型(需要在堆上创建新的空间),当取出集合中的值时,也会进行拆箱操作,从堆上取出数据放到数据栈上。

         尽管你将一个int型放入ArrayList中不会引起明显的瓶颈,但是当放入成千上万个数据时,这就是一个问题了。

   与非泛型容器相比,泛型容器的一些优势如下:

  1. 泛型提供更好的性能,因为他们不会导致装箱和拆箱的损耗。

  2. 泛型类型更安全,因为他们只包含我们指定的类型。

  3. 泛型大幅减少了构建自定义集合类型的需要,因为基础类库提供了几个预制的容器。

     

 

你可能感兴趣的:(C#中容器的用法实验与剖析)