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;
}
我一直在 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;
}