首页 新闻 搜索 专区 学院

asp.net mvc thread problem

0
悬赏园豆:5 [已解决问题] 解决于 2012-01-20 23:13

public class AController : Controller

{

public ActionResult X()  

 {

  MyObj myobj=new MyObj();

  Application["mythread"] = new Thread(myobj.methodA);

  return View();

}

}

 

问题: 对象myobj在X方法执行完后还会被线程所保持吗? 怎么知道一个对象是否还有引用指向它?

灰灰狼的主页 灰灰狼 | 初学一级 | 园豆:5
提问于:2012-01-18 14:17
< >
分享
最佳答案
0

会保持。因为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掉
}
收获园豆:5
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-01-18 14:31

高手,哈哈。

那一个线程执行完毕之后,这种引用还会被保持吗?我做个测试啊,嘿嘿。

更进一步的,我想知道有没有办法得到一个线程所依赖的资源的列表呢? 还有一个结束的线程还会不会耗CPU等资源了呢(比如我的这个Application["mythread"],我需不需要在检测到它的IsAlive==false时给它赋空值?)?

灰灰狼 | 园豆:5 (初学一级) | 2012-01-18 15:12

测了一下,已经确定线程结束后,所依赖的资源也会被释放掉,也就是Application["myWeakRef"] == false了。

灰灰狼 | 园豆:5 (初学一级) | 2012-01-18 15:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册