全部博文(12)
分类:
2008-11-19 17:27:58
在.net中 CLR支持两种类型:值类型与引用类型,值类型具有语言基本类型的特征,而且通常由一些现有的基本类型组成( C#亦是如此,如int,char)。从某种角度上讲,值类型的提供实际上是破坏了面向对象概念的(它们不能被继承,没有构造函数),对finalization的支持也很有限。与此同时,引用类型则提供了复杂实体的建模能力,并且能够充分展现出面向对象的强大动力。
一.分配
值类型和引用类型的分配是完全不同的,熟悉.NET的人应该知道:引用类型是分配在托管堆上的,因而引用类型的分配速率是不如值类型那样理想,这主要是因为需要对托管堆上进行周期性地暂时分配和执行垃圾回收。而值类型是直接分配函数的堆栈上的,在应用程序中这种分配是要快得多的。通过测试,这两种分配方式要相差到一个数量级。
二.参数
在很多情况下你,分配往往是随差函数调用的。当值类型作为函数的参数时,其较快的分配速率被参数的值复制方式部分抵消。值类型作为参数传递时被复制到调用堆栈上,而引用类型以引用的方式传递绐函数,只需要在调用堆栈上放置对象的地址。可以通过用引用的方式来传递值类型参数,改善值类型的性能,如下例:
|
三.说明
有不少很有职业精神的软件工程实践者应该会对以上的改进发表批评了,这种微小的改善根本不会起到根本性的作用,而且会带来软件设计上的大麻烦。所以特此说有,以上的优化只是对于非常特殊需要的情况,只是用地对性能要求极其看重的情况下才使用的。