public class AController : Controller
{
public ActionResult X()
{
MyObj myobj=new MyObj();
Application["mythread"] = new Thread(myobj.methodA);
return View();
}
}
问题: 对象myobj在X方法执行完后还会被线程所保持吗? 怎么知道一个对象是否还有引用指向它?
会保持。因为Applicaton["mythread"]这个对象引用了它。你可以用WeakReference来检查是否还被引用。把你的代码稍微改成这样:
public ActionResult X()
{
MyObj myobj=new MyObj();
Application["mythread"] = new Thread(myobj.methodA);
Application["myWeakRef"] = new WeakReference(myobj);
return View();
}
//然后你可以在其他地方这样判断:
WeakReference wr = Application["myWeakRef"] as WeakReference;
if (wr.IsAlive)
{
//myobj没有被GC掉
}
高手,哈哈。
那一个线程执行完毕之后,这种引用还会被保持吗?我做个测试啊,嘿嘿。
更进一步的,我想知道有没有办法得到一个线程所依赖的资源的列表呢? 还有一个结束的线程还会不会耗CPU等资源了呢(比如我的这个Application["mythread"],我需不需要在检测到它的IsAlive==false时给它赋空值?)?
测了一下,已经确定线程结束后,所依赖的资源也会被释放掉,也就是Application["myWeakRef"] == false了。