我是ASP.NET的新手,只是构建我的第二个实时Web应用程序。
当我在一年前学习ASP.NET时,我被告知“连接和从数据库中获取数据更加昂贵,因此尽可能减少连接并有效地重新使用检索到的数据” 即可。给出的理由是
当我的研究扩展时,我学习了其他措施,一旦从回复中检索数据,就会存储数据。但现在,我逐个学习它们比连接数据库更昂贵。像...
同样Oflate,我反复建议不要在会话,查看状态等中存储检索到的表,而是连接到DB并在每次回发时重新抓取它。
根据基于SQL Server的会话状态管理查看此内容,其中Framework本身使用DB来存储会话。 我觉得,我应该忘记我对数据库连接的初步学习和看法。
你说什么???
欢迎任何其他建议/提示。
由于
答案 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