连接到DB仍然更昂贵?

时间:2009-12-29 18:04:14

标签: .net asp.net performance database-connection

我是ASP.NET的新手,只是构建我的第二个实时Web应用程序。

当我在一年前学习ASP.NET时,我被告知“连接和从数据库中获取数据更加昂贵,因此尽可能减少连接并有效地重新使用检索到的数据” 即可。给出的理由是

  1. 首先需要建立与DB服务器的连接。
  2. 与IIS相比,数据库服务器上的并发连接将更少。
  3. 使用断开连接的架构,以便可以很快关闭连接(当然还有其他flexibilites) 等等。
  4. 当我的研究扩展时,我学习了其他措施,一旦从回复中检索数据,就会存储数据。但现在,我逐个学习它们比连接数据库更昂贵。像...

    1. 会话变量:内存大小与用户数一起冒泡
    2. 查看状态:加密和旅行的过程使其更加昂贵。
    3. 应用程序变量:在所有情况下都没那么有用。
    4. 缓存:(我知道,但直到现在才使用它们。)
    5. 同样Oflate,我反复建议不要在会话,查看状态等中存储检索到的表,而是连接到DB并在每次回发时重新抓取它。

      根据基于SQL Server的会话状态管理查看此内容,其中Framework本身使用DB来存储会话。 我觉得,我应该忘记我对数据库连接的初步学习和看法。

      你说什么???

      欢迎任何其他建议/提示。

      由于

6 个答案:

答案 0 :(得分:11)

一般来说,你说的是真的,但连接池会带来很多连接的开销。

使用连接池时,您有一组连接,这些连接在向数据库发出请求时使用。然后将这些连接回收用于后续使用。我在解释它方面做得很差,但一如既往维基百科有一些很好的信息可以帮助你入门。

http://en.wikipedia.org/wiki/Connection_pool

如果您正在寻找一颗银弹,例如总是使用xxx,不幸的是没有一颗。您需要评估每个场景并在那里做出决定。

例如,如果您与数据库服务器的连接速度很慢,那么您可能希望缓存检索的数据,以最大限度地减少对数据库的调用次数。

另一方面,如果你的系统资源有限,经常调用数据库可能是一个有效的选择。

您必须为您开发的每个系统评估这些情况,以充分利用您的软件,但如果构建正确,通常可以很容易地使系统适应您遇到的任何约束。

答案 1 :(得分:2)

连接池可以极大地限制建立与数据库的连接的成本。连接池是一种ADO.NET(我认为)技术,只要连接字符串相同,它就会基本上恢复数据库连接。我还要小心缓存数据,除非你知道你的缓存数据是相当静态的。

因此,总而言之,我想说不要担心建立与数据库的连接的成本。大多数N层,断开连接的应用程序频繁连接到数据库。我认为你不必担心这个。

兰迪

答案 2 :(得分:2)

连接池现在减少了开销。

我发现往返行程会导致性能下降,通常是因为ORM: - )

答案 3 :(得分:1)

与本地RAM中的任何内容相比,数据库连接通常会变慢。是的,将内容存储在RAM中会导致内存使用量随着并发用户数量的增加而增加......所以呢?这就是在多台机器上进行扩展的目的。一切都是权衡。你需要看看你想要完成什么,然后选择要交易的东西。

答案 4 :(得分:0)

使用连接池是个好主意。当您必须从数据库中获取数据时,JSON是一种很好的方法。我们应该尽量避免Session&查看状态可以多次降低应用程序性能。

答案 5 :(得分:0)

我同意已经提出的许多意见。连接池意味着如果一个新的数据库连接位于池中并且可用,则不需要打开它。

话虽如此,小心重复访问数据库,特别是对于可以缓存的主列表类型数据。面向对象的数据库访问代码因过多的数据库活动而臭名昭着,其中大部分都可以通过一些规划来防止。利用ASP.NET的应用程序缓存来存储不经常更改的静态数据(当它执行时,刷新并重新加载缓存)。

我不是会话变量的粉丝,因为它们类似于全局变量并且用于草率编码。它们也不适合REST,Azure等采用的无状态编程模型。仅仅是我的2美分。

小心Viewstate重载,但是如果你把它保持小,我就不会发现它有问题。

-Krip

相关问题