科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件ASP.NET中常用的优化性能的方法(2)

ASP.NET中常用的优化性能的方法(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

对于网站开发人员来说,在编写ASP.NET应用程序时注意性能问题,本文介绍了ASP.NET中常用的优化性能的方法

作者:Icyer 来源:CSDN  2007年9月2日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

10. 避免单线程单元 (STA) COM 组件

默认情况下,ASP.NET 不允许任何 STA COM 组件在页面内运行。若要运行它们,必须在 .aspx 文件内将 ASPCompat=true 属性包含在 @ Page 指令中。这样就将执行用的线程池切换到 STA 线程池,而且使 HttpContext 和其他内置对象可用于 COM 对象。前者也是一种性能优化,因为它避免了将多线程单元 (MTA) 封送到 STA 线程的任何调用。

使用 STA COM 组件可能大大损害性能,应尽量避免。若必须使用 STA COM 组件,如在任何 interop 方案中,则应在执行期间进行大量调用并在每次调用期间发送尽可能多的信息。另外,小心不要在构造页面期间创建任何 STA COM 组件。例如下面的代码中,在页面构造时将实例化由某个线程创建的 MySTAComponent,而该线程并不是将运行页面的 STA 线程。这可能对性能有不利影响,因为要构造页面就必须完成 MTA 和 STA 线程之间的封送处理。

<%@ Page Language="VB" ASPCompat="true" %>

<script runat=server>

Dim myComp as new MySTAComponent()

Public Sub Page_Load()

myComp.Name = "Bob"

End Sub

</script>

<html>

<%

Response.Write(myComp.SayHello)

%>

</html>

首选机制是推迟对象的创建,直到以后在 STA 线程下执行上述代码,如下面的例子所示。

<%@ Page Language="VB" ASPCompat="true" %>

<script runat=server>

Dim myComp

Public Sub Page_Load()

myComp = new MySTAComponent()

myComp.Name = "Bob"

End Sub

</script>

<html>

<%

Response.Write(myComp.SayHello)

%>

</html>

推荐的做法是在需要时或者在 Page_Load 方法中构造任何 COM 组件和外部资源。

永远不要将任何 STA COM 组件存储在可以由构造它的线程以外的其他线程访问的共享资源里。这类资源包括像缓存和会话状态这样的资源。即使 STA 线程调用 STA COM 组件,也只有构造此 STA COM 组件的线程能够实际为该调用服务,而这要求封送处理对创建者线程的调用。此封送处理可能产生重大的性能损失和可伸缩性问题。在这种情况下,请研究一下使 COM 组件成为 MTA COM 组件的可能性,或者更好的办法是迁移代码以使对象成为托管对象。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章