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. 泛型大幅减少了构建自定义集合类型的需要,因为基础类库提供了几个预制的容器。

     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值