2013-08-02 79 views
1

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

我应该使用Task api还是应该让它们保持同步?请建议最佳做法。

回答

1

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

0

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

+0

更快的性能是所有我需要。对DB的单独调用不是我的问题,并且由于连接池机制而不会妨碍性能。 – Jack

0

如果您想要优化数据库访问时间,然后尝试实施Garath和mesterak建议的操作 - 这应该会提供额外的性能改进。

但是,我必须说,如果我的页面在2s下加载,我不会在此区域进行任何优化。

夫妇的问题要问自己,你继续工作在这之前:

  • 你怎么知道它的数据库调用,正在对网页加载的影响最大?
  • 您是否看到了页面跟踪或只是假定它是影响最大的数据库?
  • 你做了什么来优化其他元素?

这里有一些其他的建议,您可以尝试:

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