婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > 判斷WebBrowser瀏覽器網(wǎng)頁(yè)加載完成的處理方法

判斷WebBrowser瀏覽器網(wǎng)頁(yè)加載完成的處理方法

熱門(mén)標(biāo)簽:百度地圖標(biāo)注點(diǎn)擊事件 廈門(mén)四川外呼系統(tǒng) 怎樣在地圖標(biāo)注消火栓圖形 山東防封電銷(xiāo)卡辦理套餐 杭州智能電話機(jī)器人 內(nèi)蒙古智能電銷(xiāo)機(jī)器人哪家強(qiáng) 地圖標(biāo)注位置多的錢(qián) 泰州手機(jī)外呼系統(tǒng)軟件 濟(jì)源人工智能電話機(jī)器人價(jià)格

很多人認(rèn)為 SqlConnection 的連接是不耗時(shí)的,理由是循環(huán)執(zhí)行 SqlConnection.Open 得到的平均時(shí)間幾乎為0,但每次首次open 時(shí),耗時(shí)又往往達(dá)到幾個(gè)毫秒到幾秒不等,這又是為什么呢?

首先我們看一下 MSDN 上的權(quán)威文檔上是怎么說(shuō)的

Connecting to a database server typically consists of several time-consuming steps. A physical channel such as a socket or a named pipe must be established, the initial handshake with the server must occur, the connection string information must be parsed, the connection must be authenticated by the server, checks must be run for enlisting in the current transaction, and so on.

以上摘自 http://msdn.microsoft.com/en-us/library/8xx3tyca%28VS.80%29.aspx

也就是說(shuō)物理連接建立時(shí),需要做和服務(wù)器握手,解析連接字符串,授權(quán),約束的檢查等等操作,而物理連接建立后,這些操作就不會(huì)去做了。這些操作是需要一定的時(shí)間的。所以很多人喜歡用一個(gè)靜態(tài)對(duì)象存儲(chǔ) SqlConnection 來(lái)始終保持物理連接,但采用靜態(tài)對(duì)象時(shí),多線程訪問(wèn)會(huì)帶來(lái)一些問(wèn)題,實(shí)際上,我們完全不需要這么做,因?yàn)?SqlConnection 默認(rèn)打開(kāi)了連接池功能,當(dāng)程序 執(zhí)行  SqlConnection.Close 后,物理連接并不會(huì)被立即釋放,所以這才出現(xiàn)當(dāng)循環(huán)執(zhí)行 Open操作時(shí),執(zhí)行時(shí)間幾乎為0.

下面我們先看一下不打開(kāi)連接池時(shí),循環(huán)執(zhí)行 SqlConnection.Open 的耗時(shí)

復(fù)制代碼 代碼如下:

public static void OpenWithoutPooling()
{
string connectionString = "Data Source=192.168.10.2; Initial Catalog=News;Integrated Security=True;Pooling=False;";
Stopwatch sw = new Stopwatch();
sw.Start();
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
}
sw.Stop();
Console.WriteLine("Without Pooling, first connection elapsed {0} ms", sw.ElapsedMilliseconds);
sw.Reset();
sw.Start();
for (int i = 0; i 100; i++)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
}
}
sw.Stop();
Console.WriteLine("Without Pooling, average connection elapsed {0} ms", sw.ElapsedMilliseconds / 100);
}

SqlConnection 默認(rèn)是打開(kāi)連接池的,如果要強(qiáng)制關(guān)閉,我們需要在連接字符串中加入 Pooling=False

調(diào)用程序如下:

復(fù)制代碼 代碼如下:

Test.SqlConnectionTest.OpenWithoutPooling();
Console.WriteLine("Waiting for 10s");
System.Threading.Thread.Sleep(10 * 1000);
Test.SqlConnectionTest.OpenWithoutPooling();
Console.WriteLine("Waiting for 600s");
System.Threading.Thread.Sleep(600 * 1000);
Test.SqlConnectionTest.OpenWithoutPooling();

下面是測(cè)試結(jié)果

Without Pooling, first connection elapsed 13 ms
Without Pooling, average connection elapsed 5 ms
Wating for 10s
Without Pooling, first connection elapsed 6 ms
Without Pooling, average connection elapsed 4 ms
Wating for 600s
Without Pooling, first connection elapsed 7 ms
Without Pooling, average connection elapsed 4 ms

從這個(gè)測(cè)試結(jié)果看,關(guān)閉連接池后,平均每次連接大概要耗時(shí)4個(gè)毫秒左右,這個(gè)就是建立物理連接的平均耗時(shí)。

下面再看默認(rèn)情況下的測(cè)試代碼

復(fù)制代碼 代碼如下:

        public static void OpenWithPooling()    
 {        
 string connectionString = "Data Source=192.168.10.2; Initial Catalog=News; Integrated Security=True;";
 Stopwatch sw = new Stopwatch();     
 sw.Start();          
 using (SqlConnection conn = new SqlConnection(connectionString))
 {              
 conn.Open();  
 }          
 sw.Stop(); 
 Console.WriteLine("With Pooling, first connection elapsed {0} ms", sw.ElapsedMilliseconds);
 sw.Reset();      
 sw.Start();        
 for (int i = 0; i 100; i++) 
 {              
 using (SqlConnection conn = new SqlConnection(connectionString))
 {                 
 conn.Open();       
 }          
 }        
 sw.Stop();         
 Console.WriteLine("With Pooling, average connection elapsed {0} ms", sw.ElapsedMilliseconds / 100);   
 }


調(diào)用代碼

復(fù)制代碼 代碼如下:

                Test.SqlConnectionTest.OpenWithPooling(); 
  Console.WriteLine("Waiting for 10s");   
  System.Threading.Thread.Sleep(10 * 1000); 
  Test.SqlConnectionTest.OpenWithPooling();  
  Console.WriteLine("Waiting for 600s");     
  System.Threading.Thread.Sleep(600 * 1000);  
  Test.SqlConnectionTest.OpenWithPooling();

測(cè)試結(jié)果

With Pooling, first connection elapsed 119 ms
With Pooling, average connection elapsed 0 ms
Waiting for 10s
With Pooling, first connection elapsed 0 ms
With Pooling, average connection elapsed 0 ms
Waiting for 600s
With Pooling, first connection elapsed 6 ms
With Pooling, average connection elapsed 0 ms

這個(gè)測(cè)試結(jié)果看,第一次耗時(shí)是119ms,這是因?yàn)槲以跍y(cè)試代碼中,首先運(yùn)行的是這個(gè)測(cè)試過(guò)程,119 ms 是程序第一次啟動(dòng)時(shí)的首次連接耗時(shí),這個(gè)耗時(shí)可能不光包括連接數(shù)據(jù)庫(kù)的時(shí)間,還有 ado.net 自己初始化的用時(shí),所以這個(gè)用時(shí)可以不管。10秒以后在執(zhí)行這個(gè)測(cè)試過(guò)程,首次執(zhí)行的時(shí)間變成了0ms,這說(shuō)明連接池機(jī)制發(fā)生了作用,SqlConnection Close 后,物理連接并沒(méi)有被關(guān)閉,所以10秒后再執(zhí)行,連接幾乎沒(méi)有用時(shí)間。

但我們發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象,10分鐘后,首次連接時(shí)間變成了6ms,這個(gè)和前面不打開(kāi)連接池的測(cè)試用時(shí)幾乎一樣,也就是說(shuō)10分鐘后,物理連接被關(guān)閉了,又重新打開(kāi)了一個(gè)物理連接。這個(gè)現(xiàn)象是因?yàn)檫B接池有個(gè)超時(shí)時(shí)間,默認(rèn)情況下應(yīng)該在5-10分鐘之間,如果在此期間沒(méi)有任何的連接操作,物理連接就會(huì)被關(guān)閉。那么我們有沒(méi)有辦法始終保持物理連接呢?方法是有的。

連接池設(shè)置中有一個(gè)最小連接池大小,默認(rèn)為0,我們把它設(shè)置為大于0的值就可以保持若干物理連接始終不釋放了。看代碼

復(fù)制代碼 代碼如下:

        public static void OpenWithPooling(int minPoolSize) 
 {         
 string connectionString = string.Format("Data Source=192.168.10.2; Initial Catalog=News; Integrated Security=True;Min Pool Size={0}",minPoolSize);
 Stopwatch sw = new Stopwatch();       
 sw.Start();        
 using (SqlConnection conn = new SqlConnection(connectionString))   
 {              
 conn.Open();  
 }           
 sw.Stop();       
 Console.WriteLine("With Pooling Min Pool Size={0}, first connection elapsed {1} ms",minPoolSize, sw.ElapsedMilliseconds);
 sw.Reset();           
 sw.Start();     
 for (int i = 0; i 100; i++)  
 {          
 using (SqlConnection conn = new SqlConnection(connectionString))  
 {                  
 conn.Open();   
 }          
 }         
 sw.Stop();   
 Console.WriteLine("With Pooling Min Pool Size={0}, average connection elapsed {1} ms",minPoolSize, sw.ElapsedMilliseconds / 100);
 }


其實(shí)只要在連接字符串中加入一個(gè) Min Pool Size=n 就可以了。

調(diào)用代碼

復(fù)制代碼 代碼如下:

                Test.SqlConnectionTest.OpenWithPooling(1);  
  Console.WriteLine("Waiting for 10s");    
  System.Threading.Thread.Sleep(10 * 1000);  
  Test.SqlConnectionTest.OpenWithPooling(1);   
  Console.WriteLine("Waiting for 600s");         
  System.Threading.Thread.Sleep(600 * 1000);       
  Test.SqlConnectionTest.OpenWithPooling(1);

With Pooling Min Pool Size=1, first connection elapsed 5 ms
With Pooling Min Pool Size=1, average connection elapsed 0 ms
Waiting for 10s
With Pooling Min Pool Size=1, first connection elapsed 0 ms
With Pooling Min Pool Size=1, average connection elapsed 0 ms
Waiting for 600s
With Pooling Min Pool Size=1, first connection elapsed 0 ms
With Pooling Min Pool Size=1, average connection elapsed 0 ms

我們可以看到當(dāng) Min Pool Size = 1  時(shí),除了首次連接用時(shí)5ms以外,即便過(guò)了10分鐘,用時(shí)還是0ms,物理連接沒(méi)有被關(guān)閉。

多線程調(diào)用問(wèn)題
多線程調(diào)用我也做了測(cè)試,這里不貼代碼了,我大概講一下結(jié)果。如果是多線程訪問(wèn) SqlConnection ,注意是通過(guò) new SqlConnection 方式訪問(wèn),

那么這里有兩個(gè)問(wèn)題,如果后一個(gè)線程在前一個(gè)線程 Close 前調(diào)用了Open操作,那么 Ado.net 不可能復(fù)用一個(gè)物理連接,它將為第二個(gè)線程分配一個(gè)新的物理連接。如果后一個(gè)線程 Open  時(shí),前一個(gè)線程已經(jīng) Close 了,則新的線程使用前一個(gè)線程的物理連接。也就是說(shuō),如果同時(shí)有n個(gè)線程連接數(shù)據(jù)庫(kù),最多情況下會(huì)創(chuàng)建n條物理連接,最少情況下為1條。如果創(chuàng)建n條物理連接,則用時(shí)理論上等于 n * t / cpu , n 為線程數(shù),t 為每次創(chuàng)建物理連接的用時(shí),前面測(cè)試的結(jié)果大概是5-10ms左右,cpu 為當(dāng)前機(jī)器的CPU數(shù)量。另外網(wǎng)絡(luò),服務(wù)器的負(fù)荷也影響這個(gè)用時(shí)。為了保證在大并發(fā)時(shí),盡量少的創(chuàng)建新的物理連接,我們可以適當(dāng)把 Min Pool Size 調(diào)大一些,但也不要太大,因?yàn)閱蝹€(gè)機(jī)器TCP鏈路的數(shù)量是有限的,詳見(jiàn)我另外一篇文章 Windows 下單機(jī)最大TCP連接數(shù)

連接字符串中關(guān)于 連接池方面的參數(shù)

見(jiàn)下面鏈接 SqlConnection.ConnectionString Property

IIS 回收應(yīng)用程序池對(duì)連接池的影響
在做 ASP.NET 程序時(shí),我們會(huì)發(fā)現(xiàn),如果網(wǎng)站20分鐘不訪問(wèn),再次訪問(wèn)就會(huì)比較慢,這是因?yàn)镮IS默認(rèn)的 idle timeout 是20分鐘,如果在20分鐘內(nèi)沒(méi)有一個(gè)訪問(wèn),IIS 將回收應(yīng)用程序池,回收應(yīng)用程序池的結(jié)果就相當(dāng)于應(yīng)用程序被重啟,所有原來(lái)的全局變量,session, 物理連接都將清空。回收應(yīng)用程序池后首次訪問(wèn),相當(dāng)于前面我們看到的程序啟動(dòng)后第一次訪問(wèn)數(shù)據(jù)庫(kù),連接的建立時(shí)間將比較長(zhǎng)。所以如果網(wǎng)站在某些時(shí)段訪問(wèn)量很少的話,需要考慮 idle timeout 是否設(shè)置合理。

您可能感興趣的文章:
  • 淺析c#中如何在form的webbrowser控件中獲得鼠標(biāo)坐標(biāo)
  • 淺析c#中WebBrowser控件的使用方法
  • 解決C#中WebBrowser的DocumentCompleted事件不執(zhí)行的實(shí)現(xiàn)方法
  • 在C#中 webbrowser的使用心得
  • C#的WebBrowser的操作與注意事項(xiàng)介紹
  • 使用C#處理WebBrowser控件在不同域名中的跨域問(wèn)題
  • c# 在WebBrowser中用SendMessage模擬鼠標(biāo)點(diǎn)擊
  • WinForm項(xiàng)目開(kāi)發(fā)中Excel用法實(shí)例解析
  • WinForm項(xiàng)目開(kāi)發(fā)中NPOI用法實(shí)例解析
  • WinForm ToolTip使用方法小結(jié)
  • WinForm項(xiàng)目開(kāi)發(fā)中WebBrowser用法實(shí)例匯總

標(biāo)簽:朝陽(yáng) 喀什 洛陽(yáng) 朔州 周口 新鄉(xiāng) 臺(tái)州 百色

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《判斷WebBrowser瀏覽器網(wǎng)頁(yè)加載完成的處理方法》,本文關(guān)鍵詞  判斷,WebBrowser,瀏覽器,網(wǎng)頁(yè),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《判斷WebBrowser瀏覽器網(wǎng)頁(yè)加載完成的處理方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于判斷WebBrowser瀏覽器網(wǎng)頁(yè)加載完成的處理方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    风间由美性色一区二区三区| 手机精品视频在线观看| 亚洲欧美成aⅴ人在线观看| 国产激情91久久精品导航 | 麻豆国产欧美日韩综合精品二区 | 欧美人妖巨大在线| 水野朝阳av一区二区三区| 欧美日韩日本视频| 蜜臀国产一区二区三区在线播放| 日韩视频一区二区三区在线播放| 91精品中文字幕一区二区三区| 精品福利二区三区| 国产一区二区三区免费观看| 日韩美女视频一区二区在线观看| 国产一区二区在线看| 精品少妇一区二区三区在线播放 | 日韩欧美在线网站| 国产自产视频一区二区三区| 精品国产精品网麻豆系列| 成人sese在线| 日韩精品电影在线观看| 精品国产一区二区在线观看| 不卡高清视频专区| 午夜精品国产更新| 国产精品色噜噜| 88在线观看91蜜桃国自产| 成人综合婷婷国产精品久久免费| 一区二区三区成人| 久久精品一区二区三区不卡牛牛 | **性色生活片久久毛片| 欧美日免费三级在线| 国产精品影视网| 五月激情六月综合| 亚洲精选视频在线| 国产精品色婷婷| 久久美女高清视频| 欧美一区二区黄色| 在线视频一区二区三区| 国产精品456露脸| 日韩精品电影一区亚洲| 日韩女优视频免费观看| 成人午夜碰碰视频| 欧美bbbbb| 国产在线精品免费av| 一区二区三区中文字幕在线观看| 日韩欧美一区在线观看| 91搞黄在线观看| 91婷婷韩国欧美一区二区| 大白屁股一区二区视频| 久久国产精品99久久人人澡| 污片在线观看一区二区| 亚洲成人高清在线| 亚洲一区二区五区| 一区二区三区在线观看欧美| 国产欧美一区二区精品秋霞影院| 日韩欧美成人激情| 欧美成人女星排名| 精品少妇一区二区三区在线播放 | 99久久精品国产毛片| 久久99精品一区二区三区| 五月激情六月综合| 日韩精品电影在线观看| 麻豆91精品视频| 精品在线免费观看| 国产一区二区在线观看视频| 国模少妇一区二区三区| 国产精品香蕉一区二区三区| 国产麻豆9l精品三级站| 丁香婷婷综合网| 成人丝袜18视频在线观看| 99在线视频精品| 91视视频在线直接观看在线看网页在线看 | 视频一区二区三区中文字幕| 亚洲高清视频中文字幕| 亚洲h精品动漫在线观看| 亚洲国产美女搞黄色| 男女男精品网站| 国产伦精一区二区三区| 高清不卡一区二区在线| 99久久精品国产麻豆演员表| 91成人在线观看喷潮| 欧美精品99久久久**| 久久精品人人做| 亚洲丝袜自拍清纯另类| 丝袜美腿亚洲综合| 国产成人免费视频一区| 在线视频一区二区三区| 欧美精品一区二区三区蜜桃 | 丝袜诱惑制服诱惑色一区在线观看| 午夜精品久久一牛影视| 韩国成人精品a∨在线观看| 国产精品888| 欧美日韩电影一区| 欧美精品一区男女天堂| 亚洲天堂久久久久久久| 婷婷一区二区三区| 欧美网站一区二区| 日韩免费一区二区三区在线播放| 中文字幕精品三区| 日韩激情视频在线观看| 成人精品高清在线| 日韩一区二区三区视频在线| 欧美韩日一区二区三区四区| 亚洲成年人影院| 成人精品国产一区二区4080| 91精品国产手机| 专区另类欧美日韩| 国产剧情一区二区| 欧美一级日韩免费不卡| 亚洲精品国产a| 成人动漫一区二区| 欧美精品一区二区三区高清aⅴ| 亚洲精品成人天堂一二三| 国产不卡视频在线观看| 91精品国产综合久久久蜜臀图片 | 中文av字幕一区| 婷婷开心激情综合| 91免费国产在线| 久久久久久99精品| 久久激情综合网| 日韩欧美的一区二区| 悠悠色在线精品| 成人性视频网站| 国产亚洲成av人在线观看导航| 麻豆国产精品一区二区三区 | 1区2区3区精品视频| 国产一区二区三区免费看 | 一区二区三区高清在线| 色综合一区二区三区| 国产精品456| 国产不卡视频在线播放| 欧美一区二区三区在线观看视频| 国产精品成人网| 99久久精品国产导航| 1000精品久久久久久久久| 91亚洲精品久久久蜜桃| 欧美电影免费观看高清完整版| 视频一区国产视频| 欧美一区二区成人| 久久国产生活片100| 久久综合五月天婷婷伊人| 国产美女视频91| 中文字幕欧美日韩一区| kk眼镜猥琐国模调教系列一区二区| 国产精品福利av| 91黄色在线观看| 日韩黄色免费电影| 精品国产乱码久久久久久夜甘婷婷| 久久国产麻豆精品| 欧美激情资源网| 欧美在线视频全部完| 无码av免费一区二区三区试看| 欧美一级黄色录像| 黑人巨大精品欧美一区| 国产精品视频观看| 欧美日韩精品一区二区三区蜜桃| 石原莉奈在线亚洲二区| 久久精子c满五个校花| 色婷婷亚洲精品| 日韩精品一级中文字幕精品视频免费观看 | 色综合久久久网| 午夜精品在线看| 26uuu久久天堂性欧美| 欧美一级高清片| 国产电影一区在线| 亚洲精品少妇30p| 日韩欧美一二三四区| 国产成人精品免费在线| 一区二区三区 在线观看视频| 在线成人高清不卡| 99综合电影在线视频| 另类综合日韩欧美亚洲| 亚洲男同1069视频| 精品国产乱码久久久久久牛牛| av在线不卡免费看| 天天影视涩香欲综合网| 国产日韩欧美电影| 日韩亚洲欧美成人一区| a4yy欧美一区二区三区| 美脚の诱脚舐め脚责91| 一区二区三区中文字幕精品精品 | 欧美成人在线直播| 一本色道久久综合亚洲aⅴ蜜桃| 久久精品久久综合| 亚洲国产婷婷综合在线精品| 国产亚洲人成网站| 欧美狂野另类xxxxoooo| av资源网一区| 韩国三级中文字幕hd久久精品| 亚洲第四色夜色| 亚洲免费色视频| 中文字幕成人在线观看| 精品999久久久| 精品三级av在线| 91精品福利在线一区二区三区| 日本精品裸体写真集在线观看 | 极品少妇一区二区三区精品视频| 亚洲主播在线观看| 亚洲精品视频一区| 亚洲狼人国产精品|