C# 临时变量性能问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 08:07:18
假设有这么一段代码
ArrayList list=new ArrayList();
object temp;
while(true)
{
temp=new object();
list.Add(temp);
}
和这么一段代码
ArrayList list=new ArrayList();
while(true)
{
object temp=new object(); //会不断在堆栈上开辟新的temp引用
//再回收旧的堆栈上的temp吗?
list.Add(temp);
}
哪一段代码性能较高?

我说了不知道你信不信,这两段代码编译以后没区别

实际上C#编译器会自动优化方法中的代码,而方法中所有的变量都是在最开始就已经初始化好的,所以担心这个没意义

草剃在 正解
根据编译原理的优化规则,这两段代码编译以后确实没区别
你可以看看编译原理的知识。

两段代码都会不断的new object(),所以都会在堆上不断开辟新的内存区域,但是因为list添加了进去,所以不会被垃圾回收器回收。

而第二段的object temp的声明所分配的内存是在栈上的,因为不断的分配内存,当然会制成性能下降。