编写同步查询或异步查询

时间:2013-08-02 04:12:14

标签: c# asp.net .net sql-server multithreading

我有一个Asp.Net webforms页面。我在应用程序的一个复杂页面上的页面上有8个查询。可以缓存2个查询,它们已经被缓存,但另外6个需要命中数据库。页面在2秒内没有任何延迟地加载正常。但是,作为性能的最佳实践,我想知道是否应该使它们异步。问题是如果我将它们设置为异步,则必须为每个查询使用不同的连接,因为当前我将连接对象存储在HttpContext.Current.Items中,如果我在不同的线程上,这将不可用。

我应该使用Task api还是仅将它们保持同步?请提出最佳做法。

3 个答案:

答案 0 :(得分:1)

在我看来,最好的选择是将这些查询组合在一起。如果完全不可能,至少在sql连接上运行它们。使用async可能不会增加时间,直到你使用共享的sql连接,但我认为这是不可能的。

答案 1 :(得分:1)

如果您希望优化数据库访问时间,请尝试实现Garath和mesterak建议的内容 - 这应该会为您带来额外的性能提升。

但是,我必须说如果我的页面加载到2s以下,我就不会在这方面做任何优化。

在继续处理此问题之前,请先问自己一些问题:

  • 您如何知道其数据库调用是否对页面加载产生最大影响?
  • 您是否看过页面跟踪或者只是假设它是影响最大的数据库?
  • 你做了什么来优化其他元素?

以下是其他一些建议供您尝试:

  • 创建页面跟踪并检查结果。这是一个很好的tutorial
  • 使用PageSpeed检查您的网页,看看其他区域是否有任何优化
  • 查看这些tutorials如何优化其他页面元素

答案 2 :(得分:0)

我认为这取决于你如何拨打电话。可以创建一个简单的数据库处理类(静态)来建立一个连接,然后执行的任何查询都可以重用相同的连接对象。异步调用只意味着你并行执行它们;这可以改善用户体验(更快的性能),但是对DB的调用次数是相同的。如果您提供有关如何在代码中对数据库执行查询的更多详细信息,也许我们可以更好地回答您的问题。