首页 > 解决方案 > IIS 连接过载和 CPU 运行高

问题描述

我们的服务器上有一个由 iis 托管的 MVC 5 网站,但我们在网站中的一项功能遇到以下问题。

我们有一个数据表,其中填充了来自 SQL 数据库的数据。对于每条记录,都会创建一个复选框,供用户检查和链接该记录。检查并链接记录后,该特定记录将存储在链接表中。请参阅下面的代码以了解此功能。对于每条记录,我在服务器端调用一个方法并执行存储的过程。

javascript

$("#btnLinkTest").click(function () {
    var counter = 0;
    var checked_checkboxCounter = 0;
    $('#counter').text("0 linked");
    $('#linkModal').modal('show');

    var oTable = $("#StudentListTable").dataTable();
    $(".cbxLink:checked", oTable.fnGetNodes()).each(function () {
        checked_checkboxCounter = checked_checkboxCounter + 1;
        var currentRow = $(this).closest("tr");
        var data = $('#StudentListTable').DataTable().row(currentRow).data();

        var ER, AC;
        var StudentID = data['StudentID'];
        var TestID = $('#lblGradeID').html();
        var ET = $(this).closest('tr').find(".extraTime").val();

        if ($(this).closest('tr').find(".cbxER").is(':checked')) {
            ER = "True";
        } else {
            ER = "False";
        }


        if ($(this).closest('tr').find(".cbxAC").is(':checked')) {
            AC = "True";
        } else {
            AC = "False";
        }

        var jsObject =
        {
            StudentID: StudentID,
            TestID: TestID,
            ModifiedBy: "1",
            ElectronicReader: ER,
            Accomodation: AC,
            StudentExtraTime: ET

        };

        $.ajax({
            type: "POST",
            url: "/Administration/LinkTestToStudent_Ins/",
            data: JSON.stringify(jsObject),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                counter = counter + 1;
                $('#counter').text(counter + " / " + checked_checkboxCounter );
            },
            failure: function (response) {
                alert(response.d);
            },
            error: function (response) {
                alert(response.d);
            }
        });
    });

    return false;
});

C#

public string LinkTestToStudent_Ins(string StudentID, string TestID, string ModifiedBy, string ElectronicReader, string Accomodation, string StudentExtraTime)
{

    string result;
    DataBaseConnection dbConn = new DataBaseConnection();
    using (SqlConnection con = dbConn.SqlConn())
    {
        try
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("StudentTestLink_ins", con);
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@StudentID", StudentID);
            cmd.Parameters.AddWithValue("@TestID", TestID);
            cmd.Parameters.AddWithValue("@ModifiedBy", HttpContext.Current.Session["UserID"]);
            cmd.ExecuteNonQuery();
            con.Close();
            return result = "Linked";
        }
        catch (Exception ex)
        {
            return "Connection Error";
        }
    }
}

问题是,例如,如果我们链接超过 100 条记录,则服务器上的连接会增加很多(在这种情况下为 100),并且由于 IIS Worker 的存在,cpu 几乎以 100% 的速度运行。我怀疑这种情况正在发生,因为 javascript 代码一次为所有检查的记录调用了 c#。

请告知我如何优化此代码,以免出现上述问题。可能我可以一次调用一个 c# 方法,而不是一次调用所有方法。

标签: javascriptc#iiscpu-usage

解决方案


推荐阅读