- 浏览: 3048297 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
昨天师兄提到他们的程序有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什么的,都是有时限的啊……诶。
在需要用“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
你知道的語言好多啊,羨慕你哦^-^
像偶什么都要想辦法,都不知道哪里有什么……
多指點偶一下就好了……
像偶什么都要想辦法,都不知道哪里有什么……
多指點偶一下就好了……
发表评论
-
C#的任意类型转换
2010-09-22 19:37 0用之前的恶搞办法制造一个Func<T, U>委托来 ... -
timer与GC
2010-02-25 21:54 0CLR via C# 3rd的第21章讲解了GC相关的内容。其 ... -
CLR中值类型的实现,几个小测试
2009-12-07 17:35 0http://blogs.msdn.com/clrcodege ... -
Array.Copy()
2009-12-02 23:03 0using System; namespace Cons ... -
关于GC.KeepAlive()
2009-12-01 23:16 0调用GC.KeepAlive()确实跟调用自己写的NoInli ... -
native code一样的方法就是一样的么?
2009-10-10 11:42 0GC map EH SOS -
SRE里的Builder系列到Info系列的转换
2009-09-23 03:01 1697如果你试用(没错字,我就是说“试用”而不是“使用”)过Syst ... -
反射还真会挂……
2009-09-22 22:44 3075呃,CLR的反射也可以注入字符串……看来这里也有可玩的突破口 ... -
CLI中方法的局部变量声明
2009-09-15 10:36 0.locals init( int32 val ... -
要让CLR挂掉的话(第二弹)……
2009-09-04 03:26 12870(Disclaimer:如果需要转 ... -
要让CLR挂掉的话……
2009-09-02 16:53 4776(Disclaimer:如果需要转载请先与我联系。 作者:Re ... -
JIT与观察调用栈
2009-07-04 03:53 0Massimiliano Mantione在他的Chasing ... -
CLR上的接口调用也是在运行时检查的
2009-06-02 17:14 2689作者:RednaxelaFX 主页:http://rednax ... -
值类型上的实例方法
2009-05-29 22:15 0.NET里任何实例方法都有一个隐含的this作为第一个参数,无 ... -
call与callvirt、虚方法与非虚方法的组合
2009-05-29 21:31 0Chris Brumme: Virtual and non-v ... -
CLR 2.0的callsite caching
2009-05-29 01:52 0根据http://blogs.msdn.com/vancem/ ... -
.NET中各种黑历史般的名字
2009-05-24 04:29 0dotnetfx: .NET Frameworks COM+ ... -
.NET 4的新动向
2009-05-23 19:58 0http://weblog.ikvm.net/PermaLin ... -
.NET Framework 4 Beta 1与对应的IronPython 2.6的下载
2009-05-21 02:43 1811与先前报导的一致,微软在今天放出了.NET Framework ... -
自己关于VM的帖的目录
2009-04-07 14:02 69504JavaEye的blog系统只允许把帖放到单一类别下,而不能用 ...
相关推荐
,StringCollection?的实现方式 修改了横向滚动条的计算方式 修改了ListBox?重绘后失去焦点时不显示选中项目的问题 v2.2.0.67 调整文件名和类名 增加列表重绘代码,准备将匹配子串用粗体显示 修改了在显示时提取...
- 特殊的集合类如StringCollection,专门用于存储和操作字符串,提供了许多方便的方法,如添加、查找、清除和移除字符串等。 2. **ArrayList** - ArrayList是一个动态数组,可以存储任意类型的数据,大小可以随需...
System.Collections.Specialized命名空间包含了一些特定用途的集合,如LinkedListDictionary(键值对的链接列表)、BitArray(位数组)和StringCollection(只包含字符串的集合)。这些集合类在处理特定数据类型时...
本文将深入探讨 CodeSmith 中的两个实用技巧:使用 `StringCollection` 和 `FileNameEditor`。 ### 使用 `StringCollection` `StringCollection` 是 CodeSmith 提供的一个集合类,它提供了一种方便的方式来存储和...
泛型集合允许我们指定元素的精确类型,避免了非泛型集合的类型转换问题,并且在处理引用类型时,减少了装箱和拆箱的需要。 集合类根据其特性分为不同种类,例如: 1. ArrayList:一个动态大小的数组,允许存储任何...
StringCollection sc = new StringCollection(); // 清除不必要的标签(注释和标题) sc.Add(@"<!--(\w|\W)+?-->"); sc.Add(@"(\w|\W)+?</title>"); // 清除类名和内联样式 sc.Add(@"\s?class=\w+"); sc.Add...
这些集合包括但不限于`BitArray`、`Stack`、`Queue`、`ArrayList`、`StringCollection`、`HashTable`和`SortedList`。 - **BitArray**:用于存储布尔值的数组。 - **Stack**:后进先出(LIFO)的集合,支持快速添加...
在C#编程语言中,集合是一组对象的容器,它们提供了存储和管理数据的方式。这篇文档,"c集合的知识点.pdf",深入讲解了C#中的集合类及其相关的接口和类型。以下是对这些知识点的详细阐述: 1. **集合接口和类型**:...
以下是一些实用的技巧和设计原则,旨在提升ASP.NET的编译和运行效率: 1. **避免使用ArrayList**: ArrayList由于其非泛型性质,会导致大量的装箱拆箱操作,降低性能。推荐使用自定义集合或.NET框架提供的强类型集合...
1. **避免使用ArrayList**: ArrayList在操作过程中涉及大量的装箱和拆箱操作,这会消耗额外的时间和内存。建议使用泛型集合,如List,它能提供更好的类型安全性和性能。对于存储字符串,可以使用System.Collections....
为了提高性能,推荐使用`System.Collections.Specialized.StringCollection`来代替`ArrayList`来存储字符串,因为`StringCollection`是专门为存储字符串设计的,它内部实现了更高效的字符串管理机制。 此外,对于...
采集类型检查集例type = Stringcollection = Collection :: Set . new ( type )collection . add ( 'something' )collection . entry? { | v | v == 'something' }# => truecollection . entry? ( 'something' )# =>...
在提供的文件内容中也提到了一些CodeSmith的工具和组件,如StringCollection、FileNameEditor、FileDialogAttribute、XML和Render等,这些工具集提供了一系列功能,帮助开发者在模板中方便地处理字符串集合、文件...
- **用途**:基础类库(Base Class Library, BCL)的核心,包含了.NET框架的基本类型和核心功能。 - **特点**:几乎所有的.NET应用程序都会使用到这个命名空间中的类,如异常处理、日期时间操作等。 ##### 7. ...
10. System.Collections.Specialized:这个命名空间提供了特殊类型的集合,如LinkedListDictionary和StringCollection,满足特定的存储需求。 11. System.ComponentModel:包含了组件和控件运行时和设计时行为的...
例如,如果希望生成一个枚举类型,其中包含多个枚举成员,可以利用`StringCollection`来实现这一需求。 #### 使用FileNameEditor `FileNameEditor`提供了一种便捷的方式来自动生成文件名。这通常用于需要为每个...