2

我开发了一个与 IBM ClearQuest 交互的应用程序。问题是,当我在本地运行所有内容时,例如,在本地运行 web 服务,然后在本地运行 ASP 页面,一切都以我期望的速度运行。当我将 web 服务(预编译)发布到服务器并通过服务器运行网页时,对 web 方法的调用至少需要 10 倍的时间。我不知道为什么会这样。我制作了一个具有相关功能的控制台应用程序,并在服务器和本地执行它,它们都返回相同的时间(大致),就在我通过 web 方法执行时,一切都变得缓慢。有任何想法吗?每次都会发生这种情况,而不仅仅是第一次通话。

网络方法:

  Public Function RetrieveQueryResults(ByRef cqSession As ClearQuestOleServer.Session, _
                                         ByVal sqlStmt As String) As List(Of SearchResultsSingleIssue)

    Dim numCols As Integer, status As Integer, columnIdx As Integer
    Dim numRows As Integer
    Dim rowContents As String = ""
    Dim colValue As New Object
    Dim colLabel As New Object
    Dim allitems As New List(Of SearchResultsSingleIssue)
    Dim results As New SearchResultsSingleIssue
    Dim cqResultSet As ClearQuestOleServer.OAdResultset

    cqResultSet = cqSession.BuildSQLQuery(sqlStmt)
    cqResultSet.Execute()

    ' Get the number of columns returned by the query.
    numRows = 0
    numCols = cqResultSet.GetNumberOfColumns
    status = cqResultSet.MoveNext


    ' Collect query results.
    Do While status = AD_SUCCESS
        results = New SearchResultsSingleIssue
        numRows = numRows + 1

        For columnIdx = 1 To numCols

            colLabel = cqResultSet.GetColumnLabel(columnIdx)
            colValue = cqResultSet.GetColumnValue(columnIdx)

            'Make sure that we dont pass along a null reference
            If colValue = Nothing Then
                colValue = ""
            End If

            Select Case colLabel
                Case "ID"
                    results.IssueID = colValue
                Case "HEADLINE"
                    results.Headline = colValue
                Case "NAME"
                    results.State = colValue
                Case "OE_CONTACT"
                    results.OEContact = colValue
                Case "DESCRIPTION"
                    results.Further_Description = colValue
                Case "PRODUCT_NAME"
                    results.Product_Name = colValue
                Case "FUNCTIONAL_AREA"
                    results.Functional_Area = colValue
                Case "SUBTOPIC"
                    results.Subtopic = colValue
                Case "FOUND_VERSION"
                    results.Found_In = colValue
                Case "SCHEDULED_VERSION"
                    results.Scheduled_For = colValue
                Case "SYMPTOMS"
                    results.Symptoms = colValue
                Case "AFFECTED_SYSTEMS"
                    results.Affected_System_Types = colValue
                Case "ISSUE_TYPE"
                    results.Issue_Type = colValue
                Case "ASSIGNED_TO"
                    results.Assigned_Developer = colValue
                Case "TESTED_BY"
                    results.Assigned_Tester = colValue
                Case "BUILT_VERSION"
                    results.Built_In = colValue
                Case "TESTED_VERSION"
                    results.Tested_In = colValue
                Case "NOTES_LOG"
                    results.Notes_Log = colValue
                Case "CUSTOMER_SEVERITY"
                    results.Severity = colValue
                Case "PRIORITY"
                    results.Priority = colValue

            End Select

        Next columnIdx

        ' Add the query row result to the compiled list of all rows.
        allitems.Add(results)
        status = cqResultSet.MoveNext

    Loop

    Return allitems

End Function

本地 Windows 应用方法:

    private void button2_Click(object sender, EventArgs e)
    {
        start = DateTime.Now.TimeOfDay.Seconds;

        int numCols = 0;
        int status = 0;
        int columnIdx = 0;
        int numRows = 0;
        string rowContents = "";
        string colValue;
        string colLabel;
        List<SearchResultsSingleIssue> allitems = new List<SearchResultsSingleIssue>();
        SearchResultsSingleIssue results = new SearchResultsSingleIssue();
        ClearQuestOleServer.OAdResultset cqResultSet = default(ClearQuestOleServer.OAdResultset);

        cqResultSet = (ClearQuestOleServer.OAdResultset)ClearQuestSession.BuildSQLQuery(sqlStatement); 
        cqResultSet.Execute();

        // Get the number of columns returned by the query.
        numRows = 0;
        numCols = cqResultSet.GetNumberOfColumns();
        status = cqResultSet.MoveNext();


        // Collect query results.
        while (status == 1)
        {
            results = new SearchResultsSingleIssue();
            numRows = numRows + 1;


            for (columnIdx = 1; columnIdx <= numCols; columnIdx++)
            {
                colLabel = (string)cqResultSet.GetColumnLabel(columnIdx);
                colValue = (string)cqResultSet.GetColumnValue(columnIdx);
                //Make sure that we dont pass along a null reference
                if (colValue == null)
                {
                    colValue = "";
                }

                switch (colLabel)
                {
                    case "ID":
                        results.IssueID = colValue;
                        break;
                    case "HEADLINE":
                        results.Headline = colValue;
                        break;
                    case "NAME":
                        results.State = colValue;
                        break;
                    case "OE_CONTACT":
                        results.OEContact = colValue;
                        break;
                    case "DESCRIPTION":
                        results.Further_Description = colValue;
                        break;
                    case "PRODUCT_NAME":
                        results.Product_Name = colValue;
                        break;
                    case "FUNCTIONAL_AREA":
                        results.Functional_Area = colValue;
                        break;
                    case "SUBTOPIC":
                        results.Subtopic = colValue;
                        break;
                    case "FOUND_VERSION":
                        results.Found_In = colValue;
                        break;
                    case "SCHEDULED_VERSION":
                        results.Scheduled_For = colValue;
                        break;
                    case "SYMPTOMS":
                        results.Symptoms = colValue;
                        break;
                    case "AFFECTED_SYSTEMS":
                        results.Affected_System_Types = colValue;
                        break;
                    case "ISSUE_TYPE":
                        results.Issue_Type = colValue;
                        break;
                    case "ASSIGNED_TO":
                        results.Assigned_Developer = colValue;
                        break;
                    case "TESTED_BY":
                        results.Assigned_Tester = colValue;
                        break;
                    case "BUILT_VERSION":
                        results.Built_In = colValue;
                        break;
                    case "TESTED_VERSION":
                        results.Tested_In = colValue;
                        break;
                    case "NOTES_LOG":
                        results.Notes_Log = colValue;
                        break;
                    case "CUSTOMER_SEVERITY":
                        results.Severity = colValue;
                        break;
                    case "PRIORITY":
                        results.Priority = colValue;

                        break;
                }

            }

            // Add the query row result to the compiled list of all rows.
            allitems.Add(results);
            status = cqResultSet.MoveNext();


        }

        seconds = (DateTime.Now.TimeOfDay.Seconds - start);
        label3.Text = seconds.ToString();



    }

代码应该在大约...6 秒内执行。

4

1 回答 1

2

通常这样的事情归结为权限问题。例如,Web 服务需要匿名用户还是使用 Windows 身份验证。这也会影响网站。所以我会开始调查。

无论如何,我强烈建议您在https://codereview.stackexchange.com/上发布您的代码, 您可能会收到一些关于如何更好地构建您所做的工作的反馈。

于 2011-03-11T22:35:55.133 回答