1.我看有些程序用到FileStream,用过了,也Close掉了,为什么还要给它赋个null?
2.在Global.asax里的Application_BeginRequest或Session_Start里用new ThreadStart新开一个线程,这个线程占不占asp.net线程池?
3.什么样的线程或异步操作能不占用asp.net线程池,从例子上看,SqlCommand和FileStream的异步操作是不占的。
参考
http://msdn.microsoft.com/zh-cn/magazine/cc163463.aspx,
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_fxfund/html/dbdd55e7-d6b9-4f9e-8abb-ab0edd4457f7.htm
1,负值null有两个原因,一个是C++编程中对指针的处理的步骤被沿用到了.net代码中;二是尽快告诉GC,当前的FileStream对象可以销毁了,当 FileStream 调用 Close后还有耗时的操作,该方式可以让 FileStream对象尽快被GC回收,而不是等到引用该 FileStream 对象的代码结束后才交给GC回收;
2,这个线程不占用 asp.net 线程池,如果你使用TreadPool的话,将占用asp.net线程池,因为 asp.net使用 ThreadPool 管理线程;
3,你自己创建的非 TreadPool 类型线程都不占用asp.net线程池;所有异步委托的创建和回调都占用 asp.net 线程池。SqlCommand和FileStream异步操作的创建和回调,也就是BeginXXXX和EndXXXX也占用asp.net线程,只是该占用非常短,真正对数据源读写的操作将在线程池管理的线程之外执行,其中大部分都是非托管代码以及COM交互。