在ASP.NET中,重定向页面时仍然执行缓慢的Linq.DataContext.SubmitChanges()

本文关键字:缓慢 执行 Linq DataContext SubmitChanges NET ASP 重定向 | 更新日期: 2023-09-27 17:53:34

对于一个内部网应用程序,我有一个网页保存功能,它可以导致对几个数据库表的大量操作。我正在使用Linq2SQL,大约20秒的浏览器空闲时间被3个单独的Linq.DataContext.SubmitChanges()调用所吞噬。这些调用发生在SaveButton回发所调用的代码的末尾。

我希望在保存按钮操作中完成积累这些数据库更改所需的实际工作。但是,如果没有检测到问题或冲突,那么我想在此之后立即将用户重定向到另一个页面(这样他们就不必盯着屏幕做一些他们无法停止的事情)。然后,当用户继续时,我想调用所有的SubmitChanges()

理想工作流程:

void btnSaveClick() 
{
    CalculateChangeSetProcedure
    Redirect somewhere...
    SubmitChangesProcedure
}

所以我的问题是Response.Redirect(…(真的)只会让事情停止。有什么办法,我可以做到这一点与ASP。. NET过程,还是我必须在另一个线程上异步地做?

在ASP.NET中,重定向页面时仍然执行缓慢的Linq.DataContext.SubmitChanges()

如果您尝试提交少量数据,那么您拥有的空闲时间不正常。您可以做的第一件事是检查提交函数,看看有什么可以优化的。例如,如果您要提交50行,并且在每一行之后调用SubmitChanges,这可能会显著降低速度。在这种情况下的解决方案是准备所有日期并立即提交。

另一个选项是调用为您提交更改的服务。通过这种方式,保存将异步完成,不会中断用户。服务完成后,您可以获得一些简单的jQuery弹出窗口或其他东西来通知用户保存完成(如果这很重要)。

在重定向之前为SubmitChanges()调用启动一个单独的后台线程

void btnSaveClick() 
{    
      CalculateChangeSetProcedure
      ThreadPool.QueueUserWorkItem(new WaitCallback(this.SubmitTheStuff), null);
      Redirect somewhere..
}
private void SubmitTheStuff(object obj)
{
      SubmitChangesProcedure
}