性能提高
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
10.避免单线程单元(STA)COM组件
默认情况下,ASP.NET不允许任何STACOM组件在页面内运行。若要运行它们,必须在.aspx文件内将ASPCompat=true属性包含在@Page指令中。这样就将执行用的线程池切换到STA线程池,而且使HttpContext和其他内置对象可用于COM对象。前者也是一种性能优化,因为它避免了将多线程单元(MTA)封送到STA线程的任何调用。使用STACOM组件可能大大损害性能,应尽量避免。若必须使用STACOM组件,如在任何interop方案中,则应在执行期间进行大量调用并在每次调用期间发送尽可能多的信息。另外,小心不要在构造页面期间创建任何STACOM组件。例如下面的代码中,在页面构造时将实例化由某个线程创建的MySTAComponent,而该线程并不是将运行页面的STA线程。这可能对性能有不利影响,因为要构造页面就必须完成MTA和STA线程之间的封送处理。
<%@PageLanguage="
VB"ASPCompat="true"%>
DimmyCompasnewMySTAComponent()
PublicSubPage_Load()
myComp.Name="Bob"
EndSub
<%
Response.Write(myComp.SayHello)
%>
首选机制是推迟对象的创建,直到以后在STA线程下执行上述代码,如下面的例子所示。
<%@PageLanguage="VB"ASPCompat="true"%>
DimmyComp
PublicSubPage_Load()
myComp=newMySTAComponent()
myComp.Name="Bob"
EndSub
<%
Response.Write(myComp.SayHello)
%><