ASP.Net WebApp 性能问题

ASP.Net WebApp Performance Issue

我一直在 ASP.Net WebApp 中工作,它需要很长时间才能加载特定的 ASPX 页面。第一次在浏览器中加载页面后,下一次此问题在生产中不可替代。

更新

我添加了一些日志,看起来下面的查询需要 1 分 20 秒才能执行。你能帮我优化一下吗?第一次需要这么长时间的查询到底出了什么问题?

日志:

"11/12/15","22:24:24","ExecuteSql - ---4---- ","9",""

"11/12/15","22:25:44","ExecuteSql - ---5---- ","9",""

查询:

SELECT TOP 1 CONVERT(varchar(15), Period_End_Date, 107) as PDate FROM PBHISTORY..STATEMENT_OF_CHANGE ORDER BY Period_End_Date DESC","7 ",""

C# 代码:

public 字符串 GetDateRangeReportingDate(int reportId) { LogActivityVerbose("GetDateRangeReportingDate - before GetReportInfoById "); var report = GetReportInfoById(reportId); LogActivityVerbose("GetDateRangeReportingDate - after GetReportInfoById ");

        string sql = string.Format(@"SELECT TOP 1 CONVERT(varchar(15), Period_End_Date, 107) as PDate FROM {0}..{1}
                                           ORDER BY Period_End_Date DESC", _historyDatabase, report.SourceTableName);

        LogActivityVerbose("GetDateRangeReportingDate - before ExecuteSql ");
        var data = ExecuteSql(sql);
        LogActivityVerbose("GetDateRangeReportingDate - after ExecuteSql ");
        while (data.Read())
        {
            return data["PDate"].ToString();
        }
        return null;
    }
  • 您部署的是调试版本还是发布版本(调试版本将不包含编译器优化并将加载调试符号)?

  • 您的应用程序池回收是否过于频繁?

  • 您是否在某种初始化过程中在页面启动时加载了大量数据?

  • 还要记住新 ASP .net 预编译程序集的初始加载将在启动时进行 Jitted,因此这也需要一些时间。

更多可能性:

Web site takes unusually long time to start the first time it is accessed, (Up to 68 seconds in total)

Fixing slow initial load for IIS

我会先检查这些东西。

我找到了上面提到的性能问题的解决方案。问题是 table 中的索引错误,我通过更改 table 的索引解决了这个问题,我们从那里获取生产中的记录。

此外,我通过使用 SQL 数据适配器和 using 语句修复了框架级实体 class。应用程序在生产环境中运行速度超快。感谢您的帮助。

私有字符串ExecuteSqlNew(字符串sql) { 字符串 connectionString = ConfigurationManager.ConnectionStrings["PBReportCS"].ConnectionString; 字符串 commandTimeOut = ConfigurationManager.AppSettings["PBReportCommandTimeout"].ToString(); 数据集结果=新数据集(); 字符串 pDate = "";

        try
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    conn.Open();
                    cmd.CommandTimeout = int.Parse(commandTimeOut);
                    SqlDataAdapter adapter = new SqlDataAdapter();
                    adapter.SelectCommand = cmd;
                    adapter.Fill(result);
                    adapter.Dispose();
                    conn.Close();
                    pDate = result.Tables[0].Rows[0]["PDate"].ToString();
                }
            }
        }
        catch(Exception ex)
        {
            throw ex;
        }
        return pDate;

}