亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

解析如何正確使用SqlConnection的實現方法

2020-01-24 03:21:07
字體:
來源:轉載
供稿:網友
以前曾見過有人這樣寫代碼:
復制代碼 代碼如下:

public class Service1 : IService1
    {
        private SqlConnection conn = new SqlConnection();
        public void Method1()
        {
            //do something with conn;
        }
        public void Method2()
        {
            //do something with conn;
        }
        public void Method3()
        {
            //do something with conn;
        }
        public void Method4()
        {
            //do something with conn;
        }
    }

在服務類中,新建一個全局的conn對象,然后使用conn對象來操作數據庫。
當然,還有一些不同的版本,比如:
復制代碼 代碼如下:

private SqlConnection conn = new SqlConnection();
private static SqlConnection sconn = new SqlConnection();
private SqlConnection Conn
{
    get { return new SqlConnection(); }
}

如果有人問你哪種方式比較好,你會怎么回答?
 
首先驗證下在多線程環境下使用一個Connection的方式:
創建控制臺程序:
Main代碼如下:
復制代碼 代碼如下:

public static void Main()
{
    string connectionString = @"Data Source=./SQLEXPRESS;
                                AttachDbFilename=""E:/DB/NORTHWND.mdf"";
                                Integrated Security=True;
                                Connect Timeout=30;User Instance=True";
    string connectionStringNoPooling = connectionString + " ;Pooling='false' ";
    SqlConnection conn = new SqlConnection(connectionString);
    new Thread(() => { ExecuteCommand(conn); }) { Name = "t1" }.Start();
    new Thread(() => { ExecuteCommand(conn); }) { Name = "t2" }.Start();
}
public static void ExecuteCommand(SqlConnection conn)
{
    Console.WriteLine("Thread:{0},{1}", Thread.CurrentThread.Name, DateTime.Now);

    conn.Open();

    SqlCommand command = new SqlCommand("select * from customers", conn);
    command.ExecuteNonQuery();
    command.Dispose();
    Thread.Sleep(5000); //模擬耗時的查詢
    conn.Close();
    Console.WriteLine("Thread:{0} 執行完畢,{1}", Thread.CurrentThread.Name, DateTime.Now);
}

代碼很簡單,模擬兩個線程同時執行ExecuteCommand.方法。結果如下:

image

 

可以知道在多線程環境下使用一個Connection來執行Sql語句是不安全的,

修改Main函數如下:將一個Connection,改為多個Connection

復制代碼 代碼如下:

public static void Main()
{
    string connectionString = @"Data Source=./SQLEXPRESS;
                                AttachDbFilename=""E:/DB/NORTHWND.mdf"";
                                Integrated Security=True;
                                Connect Timeout=30;User Instance=True";
    string connectionStringNoPooling = connectionString + " ;Pooling='false' ";
    //SqlConnection conn = new SqlConnection(connectionString);
    //new Thread(() => { ExecuteCommand(conn); }) { Name = "t1" }.Start();
    //new Thread(() => { ExecuteCommand(conn); }) { Name = "t2" }.Start();
    SqlConnection conn1 = new SqlConnection(connectionString);
    SqlConnection conn2 = new SqlConnection(connectionString);
    new Thread(() => { ExecuteCommand(conn1); }) { Name = "t1" }.Start();
    new Thread(() => { ExecuteCommand(conn2); }) { Name = "t2" }.Start();
    Console.ReadLine();
}

運行結果如下:

image

既然多個Connection比一個Connection要好,

為什么還是有人使用上面的那種寫法來創建Connection呢?

我認為他們可能會認為創建多個Connection比較耗時,而且多個Connection會占用內存,影響性能等等。。

在這一點上可以使用測試數據來說明:

測試數據來自:Connection-Pooling vs. Reusing one connection

Run #

NCP

CP

OC

1

4073

374

237

2

4032

341

298

3

3985

353

242

4

4085

348

269

5

3964

369

256

6

4203

330

207

7

4055

341

359

8

4071

357

286

9

3968

363

356

10

4023

349

359

AVG

4046

353

287

 

Run #:1代表1000次查詢,2代表2000次查詢

NCP :Not Connection Pool ,未啟用數據庫連接池

CP :Connection Pool,啟用數據庫連接池

OC :One Connection,一個連接對象

從圖表可以發現啟用了連接池的方式并不比重用一個連接慢多少。

但是從穩定性,程序的健壯性來說,CP的方式明顯的好于OC。

所以下次實現服務,或者是查詢的時候完全可以使用

復制代碼 代碼如下:

public SqlConnection Connection
{
    get
    {
        return new SqlConnection(@"...");
    }
}

而不要
private SqlConnection conn = new SqlConnection(connectionString);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精选久久久久久| 亚洲福利小视频| 成人做爽爽免费视频| 91高清免费在线观看| 色久欧美在线视频观看| 精品视频久久久久久久| 日本成人在线视频网址| 欧美成人免费全部观看天天性色| 国产精品com| 国产视频久久网| 一区二区福利视频| 国产精品香蕉在线观看| 成人免费黄色网| 国产精品视频大全| 亚洲丝袜在线视频| 色狠狠久久aa北条麻妃| 欧美日本高清一区| 狠狠色噜噜狠狠狠狠97| 亚洲天堂av图片| 久久久久久一区二区三区| 精品夜色国产国偷在线| 久久久av一区| 国产精品入口免费视| 色综合久久久888| 日韩精品一区二区视频| 日韩在线视频中文字幕| 亚洲色图狂野欧美| 亚洲第一页中文字幕| 久久久99免费视频| 精品国产欧美一区二区三区成人| 亚洲欧美国产另类| 久久夜精品va视频免费观看| 国产精品久久久久久超碰| 欧美在线视频观看免费网站| 精品久久久久久久大神国产| 成人久久精品视频| 日韩精品在线播放| 亚洲精品视频中文字幕| 福利一区视频在线观看| 欧美国产精品日韩| 精品一区二区三区四区在线| 91麻豆国产语对白在线观看| 一本大道久久加勒比香蕉| 亚洲网站在线播放| 亚洲男人av在线| 国产成人av在线播放| 69av成年福利视频| 亚洲自拍偷拍在线| 国产精品18久久久久久首页狼| 国产91色在线|| 亚洲欧美日韩国产中文专区| 久久免费视频在线| 狠狠色狠狠色综合日日小说| 亚洲一区久久久| 成人有码在线视频| 91久久久久久久一区二区| 亚洲男人的天堂网站| 国产欧美一区二区三区在线看| 91精品在线影院| 亚洲精品国产综合区久久久久久久| 亚洲va久久久噜噜噜久久天堂| 欧美日韩精品在线| 精品免费在线观看| 中文字幕精品一区二区精品| 97久久精品人搡人人玩| 在线观看日韩av| 国产精品视频公开费视频| 精品久久久久久电影| 欧美韩国理论所午夜片917电影| 欧美日韩激情视频| 日本韩国在线不卡| 91精品国产91久久久久久最新| 午夜精品久久久久久久99热| 亚洲国产高清福利视频| 91精品国产乱码久久久久久蜜臀| 日韩成人av在线播放| 日韩高清电影免费观看完整版| 国产日韩欧美视频在线| 国产精品入口日韩视频大尺度| 91大神在线播放精品| 欧美激情女人20p| 91大神在线播放精品| 欧美最猛性xxxx| 日韩风俗一区 二区| 欧美性高潮床叫视频| 成人网欧美在线视频| 国产精品亚洲аv天堂网| www.日韩不卡电影av| 亚洲天堂av网| 国产美女直播视频一区| 久久久久久久久久亚洲| 中文字幕亚洲综合久久筱田步美| 欧美视频在线视频| 亚洲欧美日韩精品久久| 国产精品丝袜白浆摸在线| 性亚洲最疯狂xxxx高清| 欧美性视频网站| 久久99精品久久久久久青青91| 亚洲尤物视频网| 国产日韩欧美另类| 欧美激情在线观看视频| 亚洲综合在线播放| 国产精品夜色7777狼人| 欧美激情一级精品国产| 91精品久久久久久久久青青| 亚洲电影免费观看高清| 91在线网站视频| 亚洲最大成人免费视频| 亚洲精品国产品国语在线| 亚洲精品按摩视频| 97视频在线免费观看| 欧美xxxx14xxxxx性爽| 精品国产区一区二区三区在线观看| 亚洲精品久久久久久久久久久久| 国产主播欧美精品| 国产最新精品视频| 欧美激情免费观看| 国产精品美女主播在线观看纯欲| 久久久久日韩精品久久久男男| 欧美第一页在线| 亚洲午夜未满十八勿入免费观看全集| 精品视频在线播放免| 亚洲精品自拍偷拍| 成人情趣片在线观看免费| 欧洲一区二区视频| 国产一区二区三区在线观看网站| 91精品国产综合久久久久久久久| 亚洲天堂网站在线观看视频| 欧美日韩福利视频| 国产视频久久网| 国产成人综合久久| 国产精品视频xxxx| 91伊人影院在线播放| 91网在线免费观看| 91高潮精品免费porn| 久久精品国产2020观看福利| 日韩专区在线播放| 国产91色在线| 欧美综合国产精品久久丁香| 中文字幕自拍vr一区二区三区| 国产第一区电影| 亚洲图片欧洲图片av| 国产精品亚洲欧美导航| 亚洲人成网7777777国产| 久久久久国产视频| 久色乳综合思思在线视频| 亚洲一区二区中文| 国产精品久久久久久久久久99| 欧美日韩裸体免费视频| 北条麻妃在线一区二区| 亚洲第一免费播放区| 亚洲偷欧美偷国内偷| 国产精品老女人视频| 国产精品美女久久久久久免费| 国产精品第3页| 美女啪啪无遮挡免费久久网站| 亚洲精品资源美女情侣酒店| 在线不卡国产精品| 成人免费激情视频| 亚洲欧美激情另类校园| 日韩在线观看电影| 久久久久久久成人| 国产精品麻豆va在线播放| 日韩av在线一区二区|