while(true)
{
User user=userManage.GetUserById(1);
…… //对User对象进行操作
Thread.Sleep(10);
}与User user=null;
while(true)
{
user=userManage.GetUserById(1);
…… //对User对象进行操作
Thread.Sleep(10);
}
哪个更好,还是都是一样的,请高手指教!
{
User user=userManage.GetUserById(1);
…… //对User对象进行操作
Thread.Sleep(10);
}与User user=null;
while(true)
{
user=userManage.GetUserById(1);
…… //对User对象进行操作
Thread.Sleep(10);
}
哪个更好,还是都是一样的,请高手指教!
前一个在循环执行完毕,所有对象都可自动回收
而后一个,循环执行完后,仍突然保持着一个User对象的引用当然,一般情况下一个普通对象占用的内存基本是可以忽略不计的~
Release版完全一样结论:没有差别
只要GC没有去回收,那么对象就还在内存里,只是没人(可能出了GC)能访问到
对象在跳出方法体的时候不会释放,顶多只是被声明没有被引用,即当垃圾回收时确认可以回收资源
不会回收,回收和Sleep无任何关系大致是
1. 程序运行之初会分配一大段连续内存,除手动GC.Collect的情况,当程序运行至内存不够时,会进行垃圾回收
2. 跳出方法体只是在CLR中对象的被引用计数减一,到0为止,表示没有被引用,即在垃圾回收执行时该内存可以被回收;垃圾回收比较复杂,还是建议去看看资料 我看的是 CLR via C#
两种 都new一个对象,但是
前一种,每次 都 在 栈中声明了一个 变量,指向new出来的对象。
后一种,是在循环前面就声明好了变量,不会重复创建,只是指向不同的引用对象。
至于 释放问题,两种 都没有真正释放,只是 作用域问题,能不能访问。