如何在ASP.NET中处理长时间运行的数据库查询
我是一名
Windows桌面应用程序程序员,我是ASP.NET新手.
当我在Page_Load(对象发送者,EventArgs e)执行长时间运行的数据库查询时,用户必须等到查询完成(查询需要很长时间). 我可以使用SqlDataReader在另一个线程中逐行从表中提取数据并逐行向用户发送数据吗?通过这种方式,用户无需等到从数据库中提取所有行. 如果我使用WPF框架编写Windows桌面应用程序,我可以在另一个线程中逐行从数据库中提取数据,并使用BeginInvoke模式逐行将数据发送到UI. 但是,当我用ASP.NET编写Web应用程序时,我不知道最好的方法是什么.我可以在另一个线程中逐行提取数据并将提取的数据放入Session,然后我定期发送XMLHttpRequest以从Session获取数据吗? 我想知道是否存在长时间运行的数据库查询,在ASP.NET中处理它的最佳实践是什么? 提前致谢. 解决方法
问题是ASP.NET应用程序具有与Windows窗体应用程序不同的生命周期.呈现页面并向用户发送响应后,您将无法再处理数据.你可以做的是使用JavaScript.您可以使用UpdatePanel,ASP.NET的AJAX实现,或使用XMLHttpRequests. (JQuery,我相信你已经听过,使用$.ajax简化了这些请求).您可以使用.gif加载代替您的数据,并在页面准备好后使用javascript获取数据. 逐行加载可能比较棘手.下面的代码将启动数据库调用,并在查询完成之前返回呈现的页面: protected void Page_Load( object sender,EventArgs e) { string query = "SELECT * FROM db.Tablename;" ThreadPool.QueueUserWorkItem(new WaitCallback (BuildDataSet),query); } private void BuildDataSet(object query) { Queue Q = new Queue(); //Connection String,etc. while rdr.Read() { Q.Enqueue(rdr["Column"]; } } 您需要第二页来处理获取行的XMLHttpRequests.困难在于持久化这些数据,在请求之间进行识别,以及可能的内存管理. 我能想到的最简单的路径是在page_load上执行SELECT TOP(50),然后在获取完整数据后再执行ajax. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET MVC 反射例子
- asp.net-mvc – Application_Error已调用,但没有异常
- asp.net – 将web.web应用程序池添加到web.config会导致500
- asp.net-mvc – 有没有办法用asp.net mvc Razor ViewEngine
- asp.net – 从MVC视图中的模型访问displayName属性
- 使用VSCode如何调试C#控制台程序_1
- asp.net-mvc – 具有WebApi和Controller路由的Url.Action
- asp.net – 如何实时压缩和流量到Response.Output实时?
- asp.net-mvc – 如何使用MVC 4上传大文件?
- 从ASP.NET Core日志记录中删除日志中的敏感信息
- asp.net – 为MVC视图订购实体框架项和子项
- asp.net – WebControl创建中的Render和RenderCo
- Asp.NET cookies返回null
- asp.net-mvc – 如何从HttpContext访问ViewData?
- asp.net – IE8 Win7 Facebook Connect问题
- asp.net – 浏览器关闭后的身份验证/会话cookie删
- asp.net-mvc – 如何本地化枚举并使用类似于Html
- Winforms,ASP.NET,WPF的语法突出显示文本框
- asp.net-mvc – 登录MVC3中的Razor视图
- asp.net – MVC5中IdentityDbContext和IdentityD