【发布时间】:2013-10-05 19:19:03
【问题描述】:
我是一名 Windows 桌面应用程序程序员,并且是 ASP.NET 的新手。
当我在 Page_Load(object sender, EventArgs e) 处执行长时间运行的数据库查询时,用户必须等到查询完成(查询需要很长时间)。
我可以使用 SqlDataReader 在另一个线程中逐行从表中提取数据并将数据逐行发送给用户吗?这样,用户就不需要等到所有的行都从数据库中拉出来了。
如果我使用 WPF 框架编写 Windows 桌面应用程序,我可以在另一个线程中逐行从数据库中提取数据,并使用 BeginInvoke 模式将数据逐行发送到 UI。
但是,当我使用 ASP.NET 编写 Web 应用程序时,我不知道最好的方法是什么。我可以在另一个线程中逐行拉取数据并将拉取的数据放到Session中,然后我定期发送一个XMLHttpRequest从Session中获取拉取的数据吗?
我想知道是否存在长时间运行的数据库查询,在 ASP.NET 中处理它的最佳做法是什么?
【问题讨论】:
-
最佳实践 - 不要长时间运行查询。重新思考页面与 SP 交互的方式。例如。如果它产生大数据集,则在一次只向用户显示一小部分数据时实现分页机制。
-
如果结果数据不是太动态(不是根据用户而变化),你可以看看ASP.NET output caching
-
不应在 page_load 上调用长时间运行的查询。如果该过程需要时间并且您需要应用程序响应,您必须重新访问您的查询并尝试优化它或进行页面加载后异步 Ajax 调用。
标签: asp.net database web-applications