aspcompat性能问题

时间:2009-05-10 18:25:43

标签: asp.net asp-classic interop

我在ASP.NET中使用aspcompat页面属性,因此我调用的com组件可以获取ASP内部对象(请求,响应,应用程序等)

我已经快速创建了一个新的测试项目,一个asp.net页面和一个vb6 com组件。

页面执行此操作:

for (int i = 0; i < 1000; i++)
            Application["string" + i] = i.ToString();
        Debug.WriteLine(string.Format("{0} done adding strings to app",Environment.TickCount));
        var asp = new ASPTest.CompClass();
        asp.SetProcessId();   

基本上我在应用程序对象中添加了东西,然后调用了com组件。

Set context = GetObjectContext
If Not context Is Nothing Then
    Set app = context("Application")
    Set ses = context("Session")
    Set resp = context("Response")
    If Not app Is Nothing Then
        OutputDebugString "" & GetTickCount & " writing response"
        resp.Write "I see application from vb <br/>"
        OutputDebugString "" & GetTickCount & " before "
        For i = 100 To 200
            resp.Write GetTickCount & " i = " & app("string" & i) & "<br/>"
        Next
        OutputDebugString "" & GetTickCount & " after "
    End If
Else
    OutputDebugString "No context"
End If

问题是我在应用程序中放的东西越多,vb代码变得越慢。不是所有的代码,只是当我第一次尝试在内部对象上调用任何方法时,在我的例子中我的第一个resp.Write调用。如果我在app resp.Write中添加10000个项目需要十秒钟才能完成,60000 =&gt;超时。

当我触摸任何内部对象时,运行时第一次做了令人讨厌的事情,使对象可用于COM。

你见过这个吗?任何建议都非常感谢。

1 个答案:

答案 0 :(得分:0)

这几乎可以肯定是线程问题,可能是Interop执行线程上下文切换,每次调用VB组件到上下文中的类。

我不是这里的专家,所以我可能(可能会)得到纠正,但我相信您需要确保您的VB组件也是STA,就像标有aspcompat = true集的ASP.NET页面一样它。如果将所有组件保留在同一个线程中,则不会有任何上下文切换(需要非常昂贵的编组)。