日期:2014-05-17  浏览次数:20800 次

请问这和struct有什么关系呢?
想了一会儿,但是还是没有想得很通:
我们都知道,在C#中声明的一个类型,如 int,实际上是.Net结构System.Int32的一个实例.说,在语法上,可以把所有的基本数据类型看作是chi支持某种方法的类.
但是,我发现有这么一句话,就有点蒙了:
这里的"类型"仍然存储为基本类型.基本类型在概念上用.Net结构便是,所以肯定没有性能损失!
这的一时间想不出为什么,性能不损失和是结构类型,有什么关系哈?
有点半懂半不懂.和结构有关,最多不就说和"值类型"有关.

------解决方案--------------------
这类疑问在msdn上有说明,你可以去msdn上看看
------解决方案--------------------
说结构体性能开销小主要是结构体内存分配简单。在堆栈上分配对象,只要修改堆栈指针寄存器就可以“腾出空间”了。反之,把指针往相反的方向移动,就删除了。存储是连续的。在栈上分配空间就很复杂了,你要寻找一个没有被使用的地方,还要判断它是否能容纳下这个对象。删除(垃圾回收)就更麻烦了。需要看有没有别的对象还保持对它的引用。
------解决方案--------------------
引用:
LZ我想再问个问题,在1楼你说的int为32位,所以可以直接放在cpu寄存器中,那对于long类型,是怎么处理?因为我见这么句话,基本类型在概念上用.net结构表示,所以肯定没有性能损失。貌似处理方式也也是一样的哦?

值类型初始化时被储存在线程的堆栈上,堆栈是被操作系统直接管理和操作,不受CLR垃圾处理器的影响。当实例方法结束时,其储存的数据自动释放,栈因为由操作系统直接管理和读取所以执行效率很高,但是储存的空间有限。
引用类型被分配在托管堆上,托管堆是由CLR管理和操作,由GC垃圾处理器进行释放和回收,所以一旦被初始化,其被释放存在不定性。

因此,值类型的操作效率要高于引用类型。而C#中struct类型的都是值类型,long也是值类型和int32处理方式一样。