`
RednaxelaFX
  • 浏览: 3048297 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

StringCollection? ArrayList? HashSet?——BCL里一些容器的问题

    博客分类:
  • .NET
阅读更多
昨天师兄提到他们的程序有high-CPU的问题,要想办法解决。其中一个可能出现问题的地方是程序里采用的容器。

在需要用“Set”的地方,他们用了ArrayList,而且没排序(因而用不了BinarySearch)。我一开始还没反应过来,心想该用Set的地方用ArrayList那不就是见鬼么;外加容器内容没排序,要查找就是线性的搜索了(大概是用了foreach来找?诶……)。要是用HashSet不好么。
后来才想起来,.NET Framework一直到3.0都没有HashSet这种容器,也没有ISet这样的接口。有好几种workaround,包括自己动手包装一个Hashtable/SortedList之类,或者用codeproject上的一个Set(还有这里提到的好几个)。或者用C5也可以。问题是公司里的project多半不会容许采用第三方实现的容器吧,于是codeproject和C5都用不了。只能自己动手了……

一开始没反应过来是因为在Java里用java.util.HashSet用得很习惯了,都没想过.NET这边会没有这个容器。只记得在.NET Framework 2.0之前是没有链表,后来增加了System.Collections.Generic.LinkedList<T>。
然后查了下,发觉.NET Framework 3.5里终于有System.Collections.Generic.HashSet<T>了。可惜师兄碰到的问题是面向.NET Framework 2.0的,这就没办法了……


然后师兄又提到说看到一个建议:在储存string时,应该使用System.Collections.Specialized.StringCollection而不要使用ArrayList。结果我又没反应过来。我在想,不用ArrayList?用ArrayList<String>不好么?
然后马上想起.NET Framework里没有ArrayList<T>,Java里倒是有。在.NET Framework 2.0里那容器叫 List<T>。我又弄混了啊(抱头
OK,那么.NET的ArrayList不是泛型的。那为什么要用StringCollection而不用ArrayList呢?查了下,原来StringCollection就是一个实现了IList接口的、对ArrayList的包装而已。换句话说它不过是在.NET Framework 2.0出来之前的一个老办法而已;它的实现里仍然用到了cast。在2.0之后用List<string>就不需要cast,效率应该更好一些才对(未必有多明显就是了)。

那些“建议”啊或者best practice什么的,都是有时限的啊……诶。
分享到:
评论
2 楼 RednaxelaFX 2008-04-06  
师兄后来提到那high-CPU的问题是在一个大循环里用了很慢的正则表达式造成的……
嗯这个我得注意一下自己不要犯同样的错误
1 楼 lwwin 2008-03-19  
你知道的語言好多啊,羨慕你哦^-^

像偶什么都要想辦法,都不知道哪里有什么……

多指點偶一下就好了……

相关推荐

    VB增强搜索插件 v2.3.0.74 (完整压缩包)

    ,StringCollection?的实现方式 修改了横向滚动条的计算方式 修改了ListBox?重绘后失去焦点时不显示选中项目的问题 v2.2.0.67 调整文件名和类名 增加列表重绘代码,准备将匹配子串用粗体显示 修改了在显示时提取...

    Ch06 集合、索引器与泛型.ppt

    - 特殊的集合类如StringCollection,专门用于存储和操作字符串,提供了许多方便的方法,如添加、查找、清除和移除字符串等。 2. **ArrayList** - ArrayList是一个动态数组,可以存储任意类型的数据,大小可以随需...

    C#集合类 教程学习资源

    System.Collections.Specialized命名空间包含了一些特定用途的集合,如LinkedListDictionary(键值对的链接列表)、BitArray(位数组)和StringCollection(只包含字符串的集合)。这些集合类在处理特定数据类型时...

    CodeSmith实用帮助

    本文将深入探讨 CodeSmith 中的两个实用技巧:使用 `StringCollection` 和 `FileNameEditor`。 ### 使用 `StringCollection` `StringCollection` 是 CodeSmith 提供的一个集合类,它提供了一种方便的方式来存储和...

    C#集合和数组.pdf

    泛型集合允许我们指定元素的精确类型,避免了非泛型集合的类型转换问题,并且在处理引用类型时,减少了装箱和拆箱的需要。 集合类根据其特性分为不同种类,例如: 1. ArrayList:一个动态大小的数组,允许存储任何...

    HTML冗余代码清除.pdf

    StringCollection sc = new StringCollection(); // 清除不必要的标签(注释和标题) sc.Add(@"&lt;!--(\w|\W)+?--&gt;"); sc.Add(@"(\w|\W)+?&lt;/title&gt;"); // 清除类名和内联样式 sc.Add(@"\s?class=\w+"); sc.Add...

    .net 资料

    这些集合包括但不限于`BitArray`、`Stack`、`Queue`、`ArrayList`、`StringCollection`、`HashTable`和`SortedList`。 - **BitArray**:用于存储布尔值的数组。 - **Stack**:后进先出(LIFO)的集合,支持快速添加...

    c集合的知识点.pdf

    在C#编程语言中,集合是一组对象的容器,它们提供了存储和管理数据的方式。这篇文档,"c集合的知识点.pdf",深入讲解了C#中的集合类及其相关的接口和类型。以下是对这些知识点的详细阐述: 1. **集合接口和类型**:...

    提高asp.net编译运行速度

    以下是一些实用的技巧和设计原则,旨在提升ASP.NET的编译和运行效率: 1. **避免使用ArrayList**: ArrayList由于其非泛型性质,会导致大量的装箱拆箱操作,降低性能。推荐使用自定义集合或.NET框架提供的强类型集合...

    提高.net运行速度

    1. **避免使用ArrayList**: ArrayList在操作过程中涉及大量的装箱和拆箱操作,这会消耗额外的时间和内存。建议使用泛型集合,如List,它能提供更好的类型安全性和性能。对于存储字符串,可以使用System.Collections....

    asp.net编译运行速度.txt

    为了提高性能,推荐使用`System.Collections.Specialized.StringCollection`来代替`ArrayList`来存储字符串,因为`StringCollection`是专门为存储字符串设计的,它内部实现了更高效的字符串管理机制。 此外,对于...

    采集

    采集类型检查集例type = Stringcollection = Collection :: Set . new ( type )collection . add ( 'something' )collection . entry? { | v | v == 'something' }# =&gt; truecollection . entry? ( 'something' )# =&gt;...

    CodeSmith开发资料.pdf

    在提供的文件内容中也提到了一些CodeSmith的工具和组件,如StringCollection、FileNameEditor、FileDialogAttribute、XML和Render等,这些工具集提供了一系列功能,帮助开发者在模板中方便地处理字符串集合、文件...

    .net 命名空间总结

    - **用途**:基础类库(Base Class Library, BCL)的核心,包含了.NET框架的基本类型和核心功能。 - **特点**:几乎所有的.NET应用程序都会使用到这个命名空间中的类,如异常处理、日期时间操作等。 ##### 7. ...

    net Framework下的命名空间.docx

    10. System.Collections.Specialized:这个命名空间提供了特殊类型的集合,如LinkedListDictionary和StringCollection,满足特定的存储需求。 11. System.ComponentModel:包含了组件和控件运行时和设计时行为的...

    codesmith开发资料.pdf

    例如,如果希望生成一个枚举类型,其中包含多个枚举成员,可以利用`StringCollection`来实现这一需求。 #### 使用FileNameEditor `FileNameEditor`提供了一种便捷的方式来自动生成文件名。这通常用于需要为每个...

Global site tag (gtag.js) - Google Analytics