偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

剖析ADO.NET連接池優(yōu)缺點(diǎn)

開(kāi)發(fā) 后端
文章介紹了ADO.NET連接池、如何實(shí)現(xiàn)ADO.NET連接池、優(yōu)點(diǎn)和缺點(diǎn),希望大家通過(guò)本文可以更好的了解連接池這個(gè)概念。

ADO.NET經(jīng)過(guò)長(zhǎng)時(shí)間的發(fā)展,很多用戶(hù)都很了解ADO.NET了,這里我發(fā)表一下個(gè)人理解,和大家討論討論。問(wèn)題,一種CS架構(gòu)的程序,直接把SQL Server作為服務(wù)端,每個(gè)客戶(hù)端直接連接數(shù)據(jù)庫(kù)操作,如果客戶(hù)端打開(kāi)的數(shù)量過(guò)多時(shí)SQL Server的連接數(shù)將會(huì)特別高,數(shù)據(jù)庫(kù)端形成性能瓶頸,這種情況下怎么辦?想了想,造成這種情況的原因是ADO.NET的內(nèi)部機(jī)制造成的。

#T#ADO.NET中為了提高性能,所以使用了連接池,這樣每個(gè)請(qǐng)求就不必都創(chuàng)建一個(gè)連接,然后認(rèn)證,然后執(zhí)行SQL,而是從連接池中直接取出連接執(zhí)行SQL,執(zhí)行完成后也并不是真正關(guān)閉連接,而是將該連接重新放回連接池中。如果有100個(gè)客戶(hù)端,每個(gè)客戶(hù)端在使用一段時(shí)間后連接池中保存了10個(gè)連接,那么在這種情況下,即使不在客戶(hù)端做任何操作,SQL Server上都有1000個(gè)連接,這樣不出性能問(wèn)題才怪。

既然是ADO.NET連接池的問(wèn)題,針對(duì)該問(wèn)題的2個(gè)解決辦法:

1.關(guān)閉ADO.NET的連接池,每次執(zhí)行SQL時(shí)都是新建一個(gè)連接執(zhí)行,然后關(guān)閉。這樣做將使數(shù)據(jù)查詢(xún)有所減慢(每次都建立連接,每次都認(rèn)證,當(dāng)然會(huì)慢了),不過(guò)這個(gè)慢是毫秒級(jí)的,一般感覺(jué)不到的,但是如果一個(gè)操作就涉及到幾百個(gè)SQL語(yǔ)句的情況可能會(huì)明細(xì)感覺(jué)到減慢。修改方法特別簡(jiǎn)單,都不用修改代碼,在數(shù)據(jù)庫(kù)鏈接字符串中加入Pooling=False;即可。

2.修改架構(gòu),這種CS架構(gòu)除了性能問(wèn)題外還會(huì)出現(xiàn)其他的比如安全上的問(wèn)題??梢詫⒅苯舆B數(shù)據(jù)庫(kù)的方法改成連接服務(wù),這其中可以使用Remoting、Web服務(wù)等,當(dāng)然現(xiàn)在可以統(tǒng)一用WCF了。這樣做就只有服務(wù)程序去連接數(shù)據(jù)庫(kù),而客戶(hù)端只連接服務(wù)程序,這樣就不會(huì)出現(xiàn)連接池造成的瓶頸。不過(guò)這樣做代碼修改量很大,若真要改還是很痛苦的。

介紹ADO.NET連接池

連接池允許應(yīng)用程序從連接池中獲得一個(gè)連接并使用這個(gè)連接,而不需要為每一個(gè)連接請(qǐng)求重新建立一個(gè)連接。一旦一個(gè)新的連接被創(chuàng)建并且放置在連接池中,應(yīng)用程序就可以重復(fù)使用這個(gè)連接而不必實(shí)施整個(gè)數(shù)據(jù)庫(kù)連接創(chuàng)建過(guò)程。

當(dāng)應(yīng)用程序請(qǐng)求一個(gè)連接時(shí),連接池為該應(yīng)用程序分配一個(gè)連接而不是重新建立一個(gè)連接;當(dāng)應(yīng)用程序使用完連接后,該連接被歸還給連接池而不是直接釋放。

如何實(shí)現(xiàn)ADO.NET連接池

確保你每一次的連接使用相同的連接字符串(和連接池相同);只有連接字符串相同時(shí)連接池才會(huì)工作。如果連接字符串不相同,應(yīng)用程序就不會(huì)使用連接池而是創(chuàng)建一個(gè)新的連接。

優(yōu)點(diǎn)

使用連接池的最主要的優(yōu)點(diǎn)是性能。創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)連接所耗費(fèi)的時(shí)間主要取決于網(wǎng)絡(luò)的速度以及應(yīng)用程序和數(shù)據(jù)庫(kù)服務(wù)器的(網(wǎng)絡(luò))距離,而且這個(gè)過(guò)程通常是一個(gè)很耗時(shí)的過(guò)程。而采用數(shù)據(jù)庫(kù)連接池后,數(shù)據(jù)庫(kù)連接請(qǐng)求可以直接通過(guò)連接池滿(mǎn)足而不需要為該請(qǐng)求重新連接、認(rèn)證到數(shù)據(jù)庫(kù)服務(wù)器,這樣就節(jié)省了時(shí)間。

缺點(diǎn)

數(shù)據(jù)庫(kù)連接池中可能存在著多個(gè)沒(méi)有被使用的連接一直連接著數(shù)據(jù)庫(kù)(這意味著資源的浪費(fèi))。

技巧和提示

1. 當(dāng)你需要數(shù)據(jù)庫(kù)連接時(shí)才去創(chuàng)建連接池,而不是提前建立。一旦你使用完連接立即關(guān)閉它,不要等到垃圾收集器來(lái)處理它。

2. 在關(guān)閉數(shù)據(jù)庫(kù)連接前確保關(guān)閉了所有用戶(hù)定義的事務(wù)。

3. 不要關(guān)閉數(shù)據(jù)庫(kù)中所有的連接,至少保證連接池中有一個(gè)連接可用。如果內(nèi)存和其他資源是你必須首先考慮的問(wèn)題,可以關(guān)閉所有的連接,然后在下一個(gè)請(qǐng)求到來(lái)時(shí)創(chuàng)建連接池。

  1. Console.WriteLine("ReturnValue: {0}", rowCount.ToString())  
  2. Console.WriteLine("All Rows:")  
  3. Dim row As DataRow  
  4. For Each row In categories.Rows  
  5. Console.WriteLine("{0}: {1}", row(0), row(1))  
  6. Next  
  7. End Using  
  8. End Sub 


 

責(zé)任編輯:田樹(shù) 來(lái)源: 博客
相關(guān)推薦

2009-12-23 09:01:15

ADO.NET連接池

2009-11-03 16:51:04

ADO.NET連接池觀(guān)

2010-01-05 10:11:23

ADO.NET連接池

2009-11-03 15:58:22

2009-12-23 14:53:28

ADO.NET連接池

2009-11-12 09:25:21

ADO.NET連接池

2009-11-11 14:04:14

ADO.NET連接池

2009-11-04 16:23:09

ADO.NET存儲(chǔ)過(guò)程

2009-11-12 10:45:45

ADO.NET連接測(cè)試

2009-12-23 09:14:52

ADO.NET連接池

2009-12-30 16:22:58

ADO.NET連接池

2009-07-20 14:03:43

Ado.net連接池

2010-02-25 09:06:40

ADO.NET連接池

2009-12-24 09:49:02

ADO.Net連接池

2010-01-04 16:18:13

ADO.NET連接池

2009-06-26 14:41:48

ADO.NET

2009-11-03 16:04:29

2009-12-30 16:26:12

ADO.NET連接池

2009-07-21 11:05:49

關(guān)閉ADO.NET連接

2009-11-03 16:57:34

ADO.NET FAQ
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)