(ThreadingModel=Both),或线程模型是Neutral(Netural新出现在Windows 2000
和COM+中)的组件。下面的组件都是非Agile的:
自由线程模型组件(除非他们聚合了FTM)
Apartment线程模型组件
单线程组件
Configured组件(MTS/COM+库和服务包/应用)是非Agile的,除非它们是Neutral线程模型的。Apartment线程模型组件和其他非Agile组件最好是工作在页面范围内(就是说,他们在一个单一ASP页面中创建和销毁)。
在IIS 4.0中,线程模型是Both的组件被看作是Agile的,但在IIS 5.0中,他们不再满足Agile的条件。组件线程模型必须是Both的,并且聚合了FTM,才被看作Agile的。如果试图将一个用Server.CreateObject创建的非Agile组件存储到
Application对象中时,IIS 5.0将会抛出一个错误。
当ADO组件被标记为自由线程模型时,ADO记录集对象可以安全地存储。可以用Makfre15.bat,一般是放在\\program Files\Common\System\ADO这个文件夹里,将ADO组件标记为自由线程模型。有一点要注意:当用Access作后台数据库时,ADO不能被标记为自由线程模型。词典(Dictionary)组件也是Agile对象。
技巧5:不要缓存数据库连接
缓存ADO Connection对象是一个不好的策略。如果一个Connection对象被存储在
Application对象中并被所有页面使用,所有页面就会争着使用这个连接。如果
Connection对象被存储在Session对象中,就要为每个用户创建一个数据库连接,这就消减了连接池的作用,并且增大了Web服务器和数据库服务器的压力。可以用在每个使用ADO的ASP页创建和释放ADO对象来替代缓存数据库连接;因为IIS内建了数据库连接池,所以这种方法非常有效。
既然有连接的记录集保存了一个数据库连接的引用,因此也不应该在Application或Session对象中保存有连接的记录集。但是,你可以安全的缓存无连接的记录集,因为它并不包含到数据连接的引用。要想挂断一个记录集,可以采取如下两个步骤:
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = adUseClient ' 第一步
rs.Open strQuery, strProv
' 将记录集同数据提供者和数据源挂断
rs.ActiveConnection = N
| 对此文章发表了评论 |
