【发布时间】:2016-01-20 15:11:52
【问题描述】:
我有一个典型的RadAjaxLoadingPanel,它在按钮单击方法调用Response.Redirect 时触发。重定向页面在OnLoad 方法中有几个昂贵 存储过程。这似乎锁定了 UI,并且圆圈冻结,直到这些存储过程完成。这些存储过程是否应该保留在OnLoad 方法中?加载防止 UI 锁定的Response.Redirect 时是否有更好的实现?
protected void Button_Click(object sender, EventArgs e)
{
Response.Redirect("~/page.aspx", false);
}
【问题讨论】:
-
除非我误解了您的问题,否则您的标题中的所有三个事件都需要在页面完全呈现之前完成。也许您需要在目标页面上使用 ajax 面板来异步加载数据,以便您至少可以显示“数据加载...”消息或死亡纺车以外的其他内容?
-
“贵”有多贵?一般来说,如果某件事花费的时间超过几秒钟,它应该是background task。
-
@mason 我要说同样的话。修复 - 如果您想在不冻结 UI 的情况下运行长时间运行的进程,后台任务/调度程序可能是一个不错的选择。
-
@Mason 鉴于当天 VPN 的运行情况,有时 20 到 40 秒的时间很贵。
-
我们对您的整个应用程序了解有限,因此很难知道如何提出最佳修复建议。但是,如果页面需要来自这些存储过程的数据,那么对它们的调用是在 OnInit、OnLoad 还是 OnPreRender 中并不重要。一些选项:首先,您是否尝试过优化和调整查询?您是否正确索引了表格?任何需要这么长时间才能运行的查询都很难闻。其次,是否可以以某种方式缓存数据,这样您就不必每次页面加载时都去数据库?
标签: c# asp.net .net stored-procedures radajaxloadingpanel