超碰91资源站-超碰97豆花-超碰97人妻-超碰97人人干-超碰97人人香蕉-超碰97天天操-超碰97在线资源站-超碰97资源站共享-超碰97资源站总站-超碰aa在线91-超碰av操-超碰爱爱

半岛外围网上直营

如何解決窗體假死

轉帖|其它|編輯:郝浩|2011-04-11 14:44:55.000|閱讀 2031 次

概述:在之前的《創建無阻塞的異步調用》中,已經介紹過異步調用的編寫步驟和實施原理。異步調用是CLR為開發者提供的一種重要的編程手段,它也是構建高性能、可伸縮應用程序的關鍵。在多核CPU越來越普及的今天,異步編程允許使用非常少的線程執行很多操作。

# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

引言

  在之前的《創建無阻塞的異步調用》中,已經介紹過異步調用的編寫步驟和實施原理。異步調用是CLR為開發者提供的一種重要的編程手段,它也是構建高性能、可伸縮應用程序的關鍵。在多核CPU越來越普及的今天,異步編程允許使用非常少的線程執行很多操作。我們通常使用異步完成許多計算型、IO型的復雜、耗時操作,去取得我們的應用程序運行所需要的一部分數據。在取得這些數據后,我們需要將它們綁定在UI中呈現。當數據量偏大時,我們會發現窗體變成了空白面板。此時如果用鼠標點擊,窗體標題將會出現”失去響應”的字樣,而實際上UI線程仍在工作著,這對用戶來說是一種極度糟糕的體驗。如果你希望了解其中的原因(并不復雜:)),并徹底解決該問題,那么花時間讀完此文也許是個不錯的選擇。

  一般來說,窗體阻塞分為兩種情況。一種是在UI線程上調用耗時較長的操作,例如訪問數據庫,這種阻塞是UI線程被占用所導致,可以通過delegate.BeginInvoke的異步編程解決;另一種是窗體加載大批量數據,例如向ListView、DataGridView等控件中添加大量的數據。本文主要探討后一種阻塞。

基礎理論

  這部分簡單介紹CLR對跨線程UI訪問的處理。作為基礎內容,相信大部分.NET開發者對它并不陌生,讀者可根據實際情況略過此處。

控件的線程安全檢測

  在傳統的窗體編程中,UI中的控件元素與其他工作線程互相隔離,每次我們訪問一個UI控件,實際上都是在UI線程中進行。如果嘗試在其他線程中訪問控件,CLR針對不同的.NET Framework版本,會有不同的處理。在Framework1.x中,CLR允許應用程序以跨線程的方式運行,而在Framework2.0及以后版本中,System.Windows.Form.Control新增了CheckForIllegalCrossThreadCalls屬性,它是一個可讀寫的bool常量,標記我們是否需要對非UI線程對控件的調用做出檢測。如果指定true,當以其他線程訪問UI,CLR會跑出一個”InvalidOperationException:線程間操作無效,從不是創建控件***的線程訪問它”;如果為false,則不對該錯誤線程的調用進行捕獲,應用程序依然運行。

  在Framework1.x版本中,這個值默認是false。問什么之后的版本會加入這個屬性來約束我們的UI呢?實際上官方對此的解釋是當有多個并發線程嘗試對UI進行讀寫時,容易造成線程爭用資源帶來的死鎖。所以,CLR默認不允許以非UI線程訪問控件。

  然而,我們常常需要在窗體中使用異步線程來處理一些操作,例如IO和Socket通訊等。這時跨線程的UI訪問又是必須的,對此,.NET給我們的補充方案就是Control的Invoke和BeginInvoke。

Control的Invoke和BeginInvoke

對于這兩個方法,首先我們要有以下的認識:

1.Control.Invoke,Control.BeginInvoke和delegate.Invoke,delegate.BeginInvoke是不同的。
2.Control.Invoke中的委托方法,執行在主線程,也就是我們的UI線程。而Control.BeginInvoke從命名上來看雖然具有異步調用的特征(Begin),但也仍然執行在UI線程。
 3.如果在UI線程中直接調用Invoke和BeginInvoke,數據量偏大時,依然會造成UI的假死。

  有很多開發者在初次接觸這兩個函數時,很容易就將它們同異步聯系起來、有些人會認為他們是獨立于UI線程之外的工作線程,實際上,他們都被這兩個函數的命名所蒙蔽了。如果以傳統調用異步的方式,直接調用Control.BeginInvoke,與同步函數的執行無異,UI線程還是會處理所有辛苦的操作,造成我們的應用程序阻塞。

  Control.Invoke的調用模型很明確:在UI線程中以代碼順序同步執行,因此,拋開工作線程調用UI元素的干擾,我們可以將Control.Invoke視為同步,本文不做過多介紹。

  很多開發者在接觸異步后,再來處理窗體假死的問題,很容易想當然的將Control.BeginInvoke視為WinForm封裝的異步。所以我們重點關注這個方法。

體驗BeginInvoke

  前面說過,BeginInvoke除了命名上來看像異步,其實很多時候我們調用起來根本沒有異步的”非阻塞”特性,我用下面這個例子簡單的嘗試一次對BeginInvoke的調用。

  如你所見,我現在創建了一個簡陋的Form,其中放置了一個Lable控件lable1,一個Button控件btn_Start,下面,開始code:

private void btn_Start_Click(object sender, EventArgs e)
{
// 儲存UI線程的標識符
int curThreadID = Thread.CurrentThread.ManagedThreadId;

new Thread((ThreadStart)delegate()
{
PrintThreadLog(curThreadID);
})
.Start();
}

private void PrintThreadLog(int mainThreadID)
{
// 當前線程的標識符
// A代碼塊
int asyncThreadID = Thread.CurrentThread.ManagedThreadId;

// 輸出當前線程的扼要信息,及與UI線程的引用比對結果
// B代碼塊
label1.BeginInvoke((MethodInvoker)delegate()
{
// 執行BeginInvoke內的方法的線程標識符
int curThreadID = Thread.CurrentThread.ManagedThreadId;

label1.Text = string.Format("Async Thread ID:{0},Current Thread ID:{1},Is UI Thread:{2}",
asyncThreadID, curThreadID, curThreadID.Equals(mainThreadID));
});

// 掛起當前線程3秒,模擬耗時操作
// C代碼塊
Thread.Sleep(3000);
}

  這段代碼在新的線程中訪問了UI,所以我們使用了label1.BeginInvoke函數。新的線程中,我們取得了當前工作線程的線程標識符,也取得了BeginInvoke函數內的線程。然后,將它與UI線程的標志符作比對,將結果輸出于Label1控件上。最后,我們掛起當前工作線程3秒,用于模擬一些常見的耗時操作。

  為了便于區分,我們將這段代碼分為A、B、C三個代碼塊。

運行結果:

我們能得到以下結論:

●PrintThreadLog函數主體(A、C代碼塊)執行在新的線程,它執行了不被BeginInvoke所包含的其他代碼。
●當我們調用了Control.BeginInvoke之后,線程調度權回歸到了UI線程。也就是說,BeginInvoke內部的代碼(B代碼塊)均執行在UI線程。
●在UI線程執行BeginInvok中封裝的代碼時,工作線程內的剩余代碼(C代碼塊)同時進行。它與BeginInvoke中的UI線程并行執行,互不干擾。
 ●由于Thread.Sleep(3000)是隔離在UI線程外的工作線程,因此這行代碼帶來的線程阻塞實際上阻塞了工作線程,不會給UI帶來任何影響。

Control.BeginInvoke的真正含義

  既然Control.BeginInvoke其中的委托函數仍執行在UI線程內,那這個”異步”到底指的是什么?話題回到本文最初:我們在上文已經提到了”控件的線程安全檢測”概念,相信大家對這種工作線程內調用Control.BeginInvoke的做法已經太熟悉了。我們也提到了”CLR不喜歡工作線程調用UI元素”。微軟的決心如此之大,以至于CLR團隊在.NET Framework2.0中添加了CheckForIllegalCrossThreadCalls和Control.Invoke、Control.BeginInvoke方法。這是一次相當重大的改革,CLR團隊希望達到這樣的效果:

  如果不申明CheckForIllegalCrossThreadCalls = false;這樣的”不安全”代碼,你就只能使用Control.Invoke和Control.BeginInvoke;而只要使用后兩者,不論它們的上下文運行環境是其它工作線程還是UI線程,它們封裝的代碼都會執行在UI線程內。所以,msdn對Control.BeginInvoke給出了這樣的解釋:在創建控件的基礎句柄所在線程上異步執行指定委托。

  它的真正含義是:BeginInvoke所謂的異步,是相對于調用線程的異步,而不是相對于UI線程的異步。

  CLR把Control.BeginInvoke(delegate method)中的異步函數執行在UI內,如果你像我上文那樣用新線程調用BeginInvoke,那么method相對于這個新線程內的其他函數是異步的。畢竟method執行在了UI線程,新線程立即回調,不必等待Control.BeginInvoke的完成。所以,這個后臺線程充分享受了”異步”的好處,不再阻塞,只是我們看不到而已;當然,如果你在BeginInvoke內執行一段耗時的代碼,無論是從遠程服務器獲取數據庫資料、IO讀取,還是在控件內加載一大批數據,UI線程還是阻塞的。

  正如傳統的Delegate.BeginInvoke的異步工作線程取自于.NET線程池,Control.BeginInvoke的異步工作線程就是UI線程。

  現在您明白兩種BeginInvoke的區別了嗎?

Control.Invoke、BeginInvoke與Windows消息

  實際上,Invoke和BeginInvoke的原理是將調用的方法Marshal成消息,然后調用Win32Api的RegisterWindowMessage()向UI發送消息。我們使用Reflector,可以看到以下代碼:

Control.Invoke:

public object Invoke(Delegate method, params object[] args)
{
using (new MultithreadSafeCallScope())
{
return this.FindMarshalingControl().MarshaledInvoke(this, method, args, true);
}
}

Control.BeginInvoke:

[EditorBrowsable(EditorBrowsableState.Advanced)]
public IAsyncResult BeginInvoke(Delegate method, params object[] args)
{
using (new MultithreadSafeCallScope())
{
return (IAsyncResult)this.FindMarshalingControl().MarshaledInvoke(this, method, args, false);
}
}

  在以上代碼中我們看到Control.Invoke和BeginInvoke的不同之處,在于調用MarshaledInvoke時,Invoke向最后一個參數傳遞了false,而BeginInvoke則是true。

MarshaledInvoke的結構是這樣的:

private object MarshaledInvoke(Control caller, Delegate method, object[] args, bool synchronous)

  很明顯,最后一個參數synchronous表示是否按照同步處理。MarshaledInvoke內部這樣處理這個參數:

if (!synchronous)
{
return entry;
}
if (!entry.IsCompleted)
{
this.WaitForWaitHandle(entry.AsyncWaitHandle);
}

  所以,BeginInvoke的處理就是直接回調,Invoke卻在等待異步函數執行完后,才繼續執行。

  到此為止,Invoke和BeginInvoke的工作就結束了,其余的工作就是UI對消息的處理,它由Control的WndProc(ref Message m)來執行。消息處理到底會給我們的UI帶來什么樣的影響?接著來看Application.DoEvents()函數。

Application.DoEvents

  Application.DoEvents()函數是WinForm編程中極為重要的函數,但實際編程中,大多數開發者極少調用它。如果您對這個函數缺乏了解,那很可能會在以后長期的編程中對“窗體假死”這樣的現象陷入迷惑。

  當運行 Windows 窗體時,它將創建新窗體,然后該窗體等待處理事件。該窗體在每次處理事件時,均將處理與該事件關聯的所有代碼。所有其他事件在隊列中等待。當代碼處理事件時,應用程序不會響應。例如,如果將甲窗口拖到乙窗口之上,則乙窗口不會重新繪制。

  如果在代碼中調用 DoEvents,則您的應用程序可以處理其他事件。 例如,如果您有向ListBox添加數據的窗體,并將 DoEvents 添加到代碼中,那么當將另一窗口拖到您的窗體上時,該窗體將重新繪制。如果從代碼中移除 DoEvents,那么在按鈕的單擊事件處理程序執行結束以前,您的窗體不會重新繪制。

  因此,如果我們在窗體執行事件時,不處理消息隊列中的windows消息,窗體必然會失去響應。而上文已經介紹過,Control.Invoke和BeginInvoke都會向UI發送消息,造成UI對消息的處理,因此,這為我們解決窗體加載大量數據時的假死提供了思路。

解決方案

嘗試”無假死”

  這次我們使用開發中出現頻率極高的ListView控件,體驗一次理想的”異步刷新”,窗體中有一個ListView控件命名為listView1,并將View設置為Detail,添加兩個ColumnHeader;一個Button命名為btn_Start,設計視圖如下:

開始code:

private readonly int Max_Item_Count = 10000;

private void button1_Click(object sender, EventArgs e)
{
new Thread((ThreadStart)(delegate()
{
for (int i = 0; i < Max_Item_Count; i++)
{
// 此處警惕值類型裝箱造成的"性能陷阱"
listView1.Invoke((MethodInvoker)delegate()
{
listView1.Items.Add(new ListViewItem(new string[]
{ i.ToString(), string.Format("This is No.{0} item", i.ToString()) }));
});
};
}))
.Start();
}

  代碼運行后,你將會看到一個飛速滾動的ListView列表,在加載的過程中,列表以令人眼花繚亂的速度添加數據,此時你嘗試拉動滾動條,或者移動窗體,都會發現這次的效果與以往的”白板”、”假死”截然不同!這是一個令人欣喜的變化。

運行過程:

  從我的截圖中可以看出,窗體在加載數據的過程中,依然繪制界面,并沒有出現”假死”。

  如果上述代碼調用的是Control.BeginInvoke,程序會發生些奇怪的現象,想想是為什么?

好吧,到了現在,我們終于可以松了一口氣了,界面響應的問題已經被解決,一切美好。但是,這樣的窗體還是暴漏出兩個大問題:
1. 比起傳統加載,”無假死窗體”加載速度明顯減慢。
2. 加載數據過程中,窗體發生劇烈閃爍現象。

問題分析

  我們在調用Control.Invoke時,強迫窗體處理消息,從而使界面得到了響應,同時也產生了一些副作用。其中之一就是消息處理使得窗體發生了在循環中發生了重繪,”閃爍”現象就是窗體重繪引發的,有過GDI+開發經驗的開發者應該比較熟悉。同時,每次調用Invoke都會使UI處理消息,也直接增加了控件對數據處理的時間成本,導致了性能問題。

  對于”性能問題”,我并沒有什么解決方案(有自己見解的朋友歡迎提出)。有些控件(ListView、ListBox)具有BeginUpdate和EndUpdate函數,可以臨時掛起刷新,加快性能。但畢竟我們這里創建了一個會滾動的界面,這種數據的”動態加載”方式是前者無法比擬的。

  對于”閃爍”,我先來解釋問題的原因。通常,控件的繪制包括兩個環節:擦出原對象與繪制新對象。首先windows發送一個消息,通知控件擦除原圖像,然后進行繪制。如果要在控件面板上以SolidBrush繪制,控件就會在其面板上直接繪制內容。當用戶改變了控件尺寸,Windows將會調用很多繪制回收操作,當每次回收和繪制發生時,由于”繪制”較”擦除”更為延后,才會給用戶帶來”閃爍”的感覺。以往我們為解決此類問題,往往需要在Control.WndProc中作出復雜的處理。而.NET Framework為我們提供了更為優雅的一種方案,那就是雙緩沖,我們直接調用它即可。

最終方案

1.新建Windows組件DBListView.cs,讓它繼承自ListView。
2.在控件中添加如下代碼: public DBListView()
{


// 打開控件的雙緩沖
SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
}

將項目重新生成,然后從工具箱中拖出新增的組建DBListView到窗體上,命名為dbListView1,執行以下代碼: private void button1_Click(object sender, EventArgs e)
{
new Thread((ThreadStart)(delegate()
{
for (int i = 0; i < Max_Item_Count; i++)
{
// 此處警惕值類型裝箱造成的"性能陷阱"
dbListView1.Invoke((MethodInvoker)delegate()
{
dbListView1.Items.Add(new ListViewItem(new string[]
{ i.ToString(), string.Format("This is No.{0} item", i.ToString()) }));
});
};
}))
.Start();
} >

  現在”閃爍”的問題是不是已經得到了解決?

  在我們的實際應用中,這種加載數據引起的阻塞是很常見的,在用戶對界面性能關注度不高的情況下,使用本文介紹的方式處理這種阻塞是一種不錯的選擇,如果以類似IE8、迅雷等軟件的載入動畫配合,效果會更理想。

 


標簽:

本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn

文章轉載自:博客園

為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
利記足球官網(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 真人boyu·博魚滾球網(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 最大網上PM娛樂城盤口(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 正規雷火競技官方買球(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 雷火競技權威十大網(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) boyu·博魚信譽足球官網(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 權威188BET足球網(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 正規188BET足球大全(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 精品无人区无码乱码大片国产 | 国产av一区二区三区无码野 | 国产色婷婷在线精品一区 | 国产麻豆精品久久久 | 国产成人综合久久av | 高潮爽到爆的喷水女主 | 国产欧美日韩亚洲精品区23 | 国产激情一区二区三区小说 | 国产一区二区三区久久精品小说 | 国产三级在线线看免费 | 国产午夜人做人免费视频中文 | 国产精品黄色网站一级大片手机 | 成人精品综合免费视频 | av每日更新 | 高清少妇综合亚洲 | 午夜福利理论电影网 | 91麻豆精品国产自产在线观看 | 国产精品日韩精品日本精品 | 国产精品白浆 | 精品人妻av无码系列 | 国产精品白嫩美女 | 国产巨大爆乳在线观看 | 18禁成人无遮羞网站免费 | 2025亚洲爆乳无码专区 | 韩国午夜福利理论片在线观看 | 国产在线方视频在线观看 | 国产成人午夜精华液 | 国产精品一区二区三区性色 | 潮喷失禁调教sm在线 | 国产免费又大又黄又粗在线 | av日韩天堂 | 成年人午夜免费视频 | 精品国产亚洲av麻豆 | 成人三级视频在线观看一区二区 | 国产内射大屁股白浆一区二区 | 潮喷失禁大喷 | 国产精品一区二区三区免费视频 | 国产高清成免费视频 | 国产乱aⅴ一区二区三区 | 91精品在线一区 | 高清精品一区二区三区 | 国产午夜亚洲精品 | a级无遮挡超级高清 | 国内粉嫩小视频在线观看网站 | 91午夜伦伦电影理论片 | 99久久精品国产高清一区二区 | 成人无码区免费aⅴ片在线观看 | 国产精品一区二区三区久久 | 国产成人亚洲精品大帝 | 潮喷失禁大喷 | 国产av中文字幕 | 国产精品丝袜高跟鞋 | 2025国产视频2区 | 91精品福利视频一区 | 国产欧美另类久久精品91 | av无码精品一区二区三区四区 | 丰满人妻熟妇乱又伦精品视频 | 国产91久久精品一区三区 | 波多野结衣一区二区三区无码电影 | av天堂亚洲国产av | a级毛片在线观看 | 国产成人精品a视频免费福利 | av在线无毒免费观看 | 国产欧美成人综合一级青青 | 国产高清不卡一区二区三区 | 不卡中文字幕在线观看 | 国产午夜成人av在线播放 | 白丝美女视频 | 国产精品一级爱 | 国产+欧美+激情 | 国产成人亚洲精品另类动态 | 国产精品盗摄一区二区三区 | 国产欧美第一页在线观看 | 91精品导航在线网址 | 国产成人美女福利在线观看 | 国产成人精品久久综合 | 岛国毛片一级一级特级毛片 | 黑人巨茎精品欧美一区二区 | 精品久久久久久中文字幕专区 | 成人做受视频试看60秒 | 91久久精品无码一区二区大 | 国产精品对白刺激久久久 | 国产在线精品无码不不卡 | 97色精品一区二区在线观看 | 国产成人av一区二区三区在线观看 | 国产成人精品免费大全 | 成人综合在线视频免费观看 | 国产精品高清一区二区三区人妖 | 18禁美女黄网站色大片在线 | 精品国产亚洲爽啪在线观看 | 国产三级一二三四五区 | 岛国av无码免费无禁网站麦芽 | 91精品国产自产在线观看不卡 | 国产午夜精品一区二区三区四区 | 精品国产一区二区三区久久久81 | 岛国av无码免费 | 国产成人av无码精品动漫麻豆 | 精品人妻系列无码人妻漫画 | av一区二区三区电影在线播放 | 国产福利91精品 | 91大神精品无码在线观看 | 精品国产三级在线 | 91国内精品在线观看 | 国产一级无码av免费久久 | 91免费永久 | 成人毛片免费看片 | 国产中文字幕在线播放网站 | 国产av无码专区亚洲av桃花庵 | 国产欧美日韩另类在线专区 | 91在线免费 | 国产午夜亚洲精品一级在线 | 国产丝袜美 | 国产精品爆乳在线播放第一人称 | av一区二区在线观 | 国产人无码a在线观看 | 国产极品乱码在线观看www | 精品久久全免费的听书软件 | 精品无码国产不卡在线观看首 | 国产成人精品.一二区 | 国产精品99无码一区二区视频 | 国产色婷婷在线精品一区 | 3d动漫精品啪啪一区二区中 | 国产精品女同一区二区久久 | 国产一级毛片视频国产 | 国产精品无码av | 国产91一区二 | 国产成人精品一区 | 国内欧美一区二区三区 | 国产成人高清综合在线 | 福利视频在线一区 | 国产无码黄色网站在线观看 | 国产福利萌白酱在线观看视频 | 韩国三级伦在线观看久 | 国产精品高潮呻 | 国产精品日韩在线观看一区二区 | 国产主播一区三区在线 | 国产爆乳一区不卡在线 | 国产av色黄看到爽 | 国产91精品白浆无码流出久久 | 精品无人乱码一区二区三区 | 国产这里有精品 | 国产成人麻豆精品午夜福利在线 | av无码免费岛国动作片 | 国产一区二区三区成人久久 | av资源免费 | 国产91高清精品 | 国产区在线观看视频 | 国产欧美二区三 | 国产熟女乱伦 | 99久久久精品综合 | 91人妻无码一区二区精品免费 | 国产成人理论片在线观看 | 国产精品白丝久久av情趣网站 | 国产成人亚综合91精品首页 | 91视频免费看平台安全吗 | 国产成自拍亚洲精品 | 国产偷窥澡堂在 | 国产精品一区二区在线观看99 | 成av人片在线观看 | 99国产超薄丝袜 | av免费在线观看一区二区三区 | 国产高潮流白浆喷水在线观看 | 91蜜桃传| 2025国产麻豆 | 91九色国产亚洲 | 精品国产一区二区久久久浪潮av | 国产午夜片无码区在线播放 | 国产在线欧美一区二区 | 91精品专区| 成人做羞羞的视频网站在线观看 | 国产原创在线观看播放 | 成人无码免费午夜福利在线看片 | 18禁午夜福利| 91狠狠色综合久久久夜色撩人 | 18禁黄网站禁片免费观看 | 国产成人精品综合久久 | 91人妻在线综合 | 国产高清午夜成人在线观看 | 国产精品无码秘入口草莓成人 | 国产毛片久久久久久国产毛片无码 | 2025年国产精品每日更新 | 国产精品国产三级国产剧情 | 精品国产三级a∨在线无码 精品国产三级aⅴ在线 | 精品国产一区二区三区日日嗨 | 国产91视频 | 国产福利一区二区三区在线视频 | 91精品福利观看 | 91精品国产91久久久久福利 | 成人国产一区二区精品小说 | 国产午夜在线视频 | 18禁裸乳无遮挡啪 | 国产精品女人呻吟在线观看 | 91婷婷大香蕉| a亚洲欧美中文日 | 国产成人a区在线观看视频 国产成人a视频 | 91麻豆精品国产91久久久久久 | 国产在线码观看超清无码视频 | 国产成人无码www免费视频在线 | 91久久久久精品 | 国产精品一区欧美日韩制 | 国产交换一区二区三区 | 91亚洲自偷手 | 国产成人高清在线播放 | 精品国产丝袜自在线拍国 | 成人a影片在线观看 | 国产精品一区伦免视频播放 | 国产麻豆md传媒视频 | 国产一区二区在线观看免费 | 99精品国产福利一区二区 | 国产内射爽爽大片 | 国产经典三级在线 | 国产成人a区在线观看视频 国产成人a视频 | 91在线无码精品秘入口竹美 | 国产成人麻豆亚洲综合无码精 | 国产偷亚洲电影在线观看网址 | 成人免费ā片在线观看 | 国产在线91区精品 | 国产一区美女视频 | 国产午夜无码喷水福利在线观看 | 成人国产一区二区精品小说 | 国产一区二区三区久久播放器 | 加勒比在线视频男人的天堂 | 精品色网视频久久 | 国内精品一级毛片免费看 | 国产精品一级二级在线观看 | 极品萝在线永久视频欧美 | 国产精品成人一区二区三区视 | 国产ol丝袜高跟在线观看 | 国产精品欧美一区二区二区二区 | 成人亚洲色欲色一欲 | 国产精品视频大陆免费播放 | av免费播放一区二区三区 | 国产精品一区二区国产馆蜜桃 | 国产在线视频一区二区高清乱码99 | 国产自慰精品在线 | 国产二区三区毛片 | 国产欧美v欧美v在观看 | 东京热无码人妻系列综合网站 | 国产免费1区 | 国产a一级毛片精品高清乱码 | 成人午夜电影免费完整在线看 | 精品一区二区高清 | 18禁成人黄网站 | 国产精品v户外野战 | 国产美女久久影院 | 不卡的在线免费视频 | 国产亚洲午夜影视在线观看 | 91人成在线观看网站 | 99国产女人高潮抽搐喷浆视频 | 国产综合无码三级 | 国产精品男男视频一区二区三区 | 岛国动作片免费免费全集观看 | 精品少妇无码一区二区三批 | 99精品久久久久久久久久综合 | 激情内射亚州一区二区三区爱妻 | 国产精品无码一区二区三区不卡 | av无码国产永久播放 | 国产制服精品一区二区视色 | 国产精品熟女视频一区二区 | 精品2025露脸国产偷人在视频 | 成人免费视频一区二区 | 国产精品精品自在 | 久久精品无码一区二区毛片 | 国产成人精品一区二区视频免费 | 精品国产a∨无码一区二区三 | 韩国精品一区二区 | 国产亚洲综合无码一区二区 | 国产精品一区在线播放 | 国产成人啪精品视频免费网站 | 国产精品边做奶水狂喷无码 | 91精品国产福利在线导航 | 精品无码欧美三级 | 91精品人妻一区二区三区蜜臀 | 国产精品午夜爆乳美女视频 | 国产精品成人网址在线观看 | 国产成人高清精品免费鸭子 | 国产欧美日韩欧美特级 | 成人亚洲a片v一区二区三区蜜月 | a级毛片免费观看在线 | 国产喷水在线观看 | 99久久国产宗和精品1上 | 国产白丝av无码精品 | 国产一区二区三区成人久久片 | 国产女同女互慰流白浆视频 | 18禁纯肉高黄无码动漫在线 | 国精品一区二区三区免费观看 | 国产一区二区三区小说 | 精品国产一区二区三区av麻 | 成人欧美一区二区三区黑人 | 国产无套露面在线 | 国产精品无码一本 | 国产精品无码不卡一区二区三区 | 国产白嫩精品 | 国产精品成人一区无码 | 国产午夜亚洲精品不卡在线观看 | 精品精品国产理论在线 | 国产免费内射又粗又爽密桃视频 | 国产做av无码 | 国产精品尹人在线观看 | 国产成人精品一区二三区在线观看 | 国产熟女乱子伦精品 | 91精品手机国产在线破解版 | 国自产精品手机在线 | 国产精品盗摄一区二区三区 | 国产福利第一视频 | 国产经典三级在线播放 | 国产成人精品无码一区二区三区 | 91视频黄色 | 国产狂喷潮在 | 韩国三级电影久久久 | 国产午夜福 | 精品亚洲一区二区三区 | 国产精品久久久久久亚洲毛片 | 精品一区二区三卡四卡网站 | 成人无码区免费av毛 | av无码中文一区二区三区四区 | 国内视频在线精品一区 | 国产欧美视频综合二区 | 国产精品无码福利午夜专区 | 国产一区二区三区内射 | 91成人爽a毛片一区二区动漫 | 国产激情无码一区二区在线看 | 国产成人无码精品久久久免 | 国产高清a级毛片视 | 国产三级国产精品国产普男人 | 精品国产丝袜高跟鞋子 | 成人版菠萝蜜视频在 | 国产精品无码直接看 | 国产日韩av片在线观看 | 国产精品制服丝袜美 | 国产在线观看码高清视频不卡 | 国产偷窥熟女高潮精品视频免费 | 国产精品毛片a∨一区二区三区 | 91人妻国产麻豆88 | 国产精品成人麻烦视频 | 激情无码一区二区 | av无码免费看 | 国产在线观看国自产偷精品产拍 | 国产免费无码网站在线观看 | 国产高清中文字幕欧美 | 国产日韩成人内射视频 | 国产成人亚洲精品青草天美 | 国产成人免费不卡在线观看 | av无码一区二区三 | 国产精品日本一区二区不卡视频 | 成人免费观看在线视频 | 成人区人妻精品一区二区不卡网站 | 国产一区二区三区导航 | 91青青青国产在观免费影视 | 91丝袜在线 | 国产精品视频一区二区三区免费 | 国产成人福利毛片 | 国产精品99无码一区二区视频 | 99精品免视看 | 3d动漫精品专区久久 | 成人午夜影院在 | 国产一区二区免费在线观看 | 91日韩精品久久久久精品无码 | 国产麻豆影视传媒 | 国产91精品花蝴蝶在线观看 | 肥臂无码免费一区二区三区 | 国产精品偷伦视频免费手机播 | 2025国产精品国产精华 | 国产精品成人品 | 国产精品欧美亚洲大片在线观看 | 国产午夜精品理论片久久久 | 成人婷婷网色偷偷亚洲男人 | h无码精品黄动漫 | 国产精品白丝jk白祙喷水视频 | 福利视频一区二区三区 | 国产在线精品一区二区不卡麻 | 成人无码午夜在线观看 | 91麻豆精品国产综合久久 | 91精品国产免费久久久久 | aⅴ精品无码| ww国产内射精品后入国产 | 国产成人综合亚洲日韩欧美 | av网站在线观看三级片 | 国产在线高清伦片a | 国产精品高清一区二区三区绿帽 | 精品国产免费人成在线 | 精品91一区二区三区 | 国产尤物在线观看无码不卡 | 国产av秘乱码一区二区 | 国产丝袜美腿一区二区日韩 | 岛国av无码免费无禁网站 | 高潮喷水波多野结衣在线观看 | 精品人妻无码在中文字幕 | 国产精品先锋中文在线第一页 | 国产亚洲日韩中文字幕欧美视频 | 国产一区二区不卡 | 国产午夜鲁丝片av无码 | 丰满人妻熟妇乱又伦精品劲 | 国产精品成人观看视频网 | 国产精品无码首页自拍 | 国产一区二区三区内射高清 | 国产视频一区二区三区四区 | 2025年国产理论在线观看 | 国产午夜福利久久网 | 国产在线视频变态播放 | 国产女主播在线观看 | 91麻豆精品人妻无码系列 | 国产午夜无码视频免费网站 | 国产内射爽爽大片视频社区在线 | 国产高清一区二区三区四区 | 99久久精品这里只有精品 | 精品无码一区在线观看 | 国产精品亚洲v人片 | 国产成人美女福利在线观看 | 精品无码av| 国产精品天干在线观看 | 成人无码影片视频在线 | 国产亚洲日韩网曝 | 国产精品美女爆乳在线观看99 | 国产欧美va欧美va香蕉在线观 | 国产亚洲欧美一区二区在线观看 | 国产末成年呦交在线 | 91无码欧精品亚洲日韩一区 | 国产午夜毛片一区二区三区 | 国产专区亚洲欧美另类在线 | 国产精品亚洲专区一区 | 国产av夜夜欢一区二区三区 | 国产极品精品免费 | 成人午夜亚洲精品无 | 国产综合免费视频 | 国产人妖视频一区二区 | 国产精品无码久久综合网老 | 国产精品熟妇一区二区三区四区 | 91麻豆人妻春色影视 | 丰满少妇三级全黄 | 国产精品久 | 丰满巨臀大屁股bbw 丰满老熟妇aaaa片 | 91精品综合在线偷观看视频 | 超薄丝袜足j好爽在线观看 超超碰免费超超碰免费 | 国产精品特级露脸 | 国产一级a级免费视频 | av免费播放一区二区三区 | 国精产品自线在拍在线精品 | 精品视频无码专区在线观看 | 92午夜福利极品少妇久久一区 | 成年在线观看 | 国产主播资源在线播放 | 国产精品二区在线观看 | 18禁美女裸体无遮挡免费网站 | 国产欧美va欧美va香蕉在线观看 | 国产成人高清综合在线 | 国产成人午夜91精品麻豆剧场 | 国产福利一区二区三区在线观看 | 国产精品国产高清国产av | 国产午夜福利精品无码 | 丰满人妻被公侵犯中文电影版 | 99久久精品一区二区毛片 | 国产日韩激情综合一区 | 国产v亚洲v天堂无码久久 | 国产成人精品一区二区三区不卡 | 国产亚洲人成在线视频网站 | 国产无码一区二区 | 国产v欧美ⅴ日韩v | 精品丝袜永久综合国产 | 国产精品无码首页自拍 | 国产精品亚洲专区无码性色 | 国产精品午夜福利1000集 | 91精品国产高久久久久久综合 | 精品无码一区二区三区蜜臀 | 国产欧洲一区二区在线观看 | 国产高清十八禁视频网站 | 国产午夜无码喷水福利在线观看 | 国产三级观看久久 | 丰满的少妇一区二区三区 | 国产成人av乱码在线观看 | 国产精品无码av在线播放 | 国产无套露脸 | 国产欧美va天堂在线观看视频 | 91av福利| 国产精品日韩欧美 | 91人妻视频 | 91精品国产福利尤物免费 | 国产av无码专区国产乱码 | aa片在线观看不加载 | 国产精品无码一区视频 | 精品人妻av中文字幕乱码 | 国产精品一区二区熟女不卡 | 国产午夜福利精品一 | 国产免费私拍一区二区三区 | 成人在线观看一级毛片 | 国产高清美女一级a毛片久久w | 精品无人区乱码在线观看 | 国产日韩欧美成人免费观看 | 国自产精品手机在线视频 | 国产精品观看视频免费完整版 | 91探花在线观看 | 国产精品亚欧美一区二区 | 国产护士在病房a | 国产精品一区二区av不卡 | 精品无码久久久久国产 | 91大神精品网站在线观看 | 精品视频一区二区三区 | 国产三级在线电影 | 国产成年女人特黄特色毛片免 | 国产成人片一区二区三区白 | 99精品人妻无码专区 | 国产欧美日韩综合精品一级a | 超大乳抖乳露双乳呻吟电影 | 国产精品一卡二卡三卡四卡 | 国产精品午夜福利麻豆 | 国产综合成人观 | 国产美女爽到尿喷出来视频 | 国产欧美日韩综合一区激情 | 国产午夜鲁丝片av无码第一 | 国产嫖妓一区二区三区无码 | 国产高潮流白浆喷水在线观看 | 精品无码一区二区三区av影院 | 国产在线成人一区二区 | 国产毛片精品性无码 | 国产激情无码一区二区在线看 | 国产午夜片无码区在线导航 | 国产古代一级毛片 | 国产成人精品午夜福利 | 精品麻豆一区二区 | 国产精品一区二区日韩av在线 | 国产av中文字幕www.性色av | 国产一区二区视频免费 | 国产综合精品久久亚洲 | 国产午夜福利大尺度在线观看 | 国产高潮流白浆喷水在线观看 | 成人爱av在线播放 | 国产午夜福利精品理论片在线播放 | 国产真人无码作爱视频网站 | 国偷自产一区二区 | 国产一区丝 | 国产一区不卡在 | 国产成人精品系列在线观看 | 国产一区久久 | 国产欧美另类在线视频 | 国产日韩欧美一区二区三区视频 | 国产在线观看精品一区二区三区91 | av麻豆级在线播放 | 粉嫩av久久一区二区三区王玥 | 国产成精品在线观 | 国产精品99无码一区二区视频 | 91麻豆国产福利品精 | 国产av一区二区三区蜜芽 | 99久久精品这里只有精品 | 国产一区二区不卡在线 | av天堂电影网 | 国产呦精品系列在线观看 | 精品国产黄页网站在线观看 | 91久久人澡人人添人人爽欧美 | 福利姬一区二区三区在线观看 | 国产精品一区二区公司 | 国产超碰人人做人人爱 | 国产毛片a | 国产91熟女高潮一区二区 | 国产亚洲一区交换在线 | 国产精品羞羞无码久久久 | 91系列在线观看免费 | 国产人妻精品久久久久野外 | 亚洲综合色男人的天堂 | 精品国产一区二区在线观看 | 国产成人精品无码片三区四区 | av一区二区 | 91精品一区二区三区无码吞精 | 18禁无遮挡啪啪无码网站性色 | 99九九亚洲国| 国产精品日本亚洲欧美 | 18禁超污无遮挡无码免费网站 | 国产美女爽到喷出水来视频 | 国产精品成人va在线播放 | 国产成人一区二区不卡免费视频 | 国产精品无码无卡a级毛片 国产精品无码无卡毛片不卡 | 精品国产高清一区二区久久91 | 成人午夜影视 | 国产韩国欧美在线 | 国产精品成人一区二区三区视 | 国产精品免费av片在线观看 | 国产精品色拉拉 | 国产欧美另类精品久久久 | 国产精品视频一区二区三区不卡 | av丝袜人妻另类手机版 | 精品国产国产自在线观看 | 精品亚洲午夜久 | 国产成人啪精品视频免费网站 | 国产精品毛片在线完整版的 | 国产成人精品久久一区二区三区 | 国产精品白丝喷水在线观看 | 91成人午夜精品福利院在线观看 | 国产猛男猛女超爽免费视频 | 国产一区在线白浆 | 精品人妻大屁股白浆无码久久 | www在线观看一区二区三区 | 国产精品亚洲第一区焦香味 | 国产成人综合亚洲专区 | 国产精品午夜理论片在线播放 | 成人免费在线观看毛片 | 不卡国产福利在线观看 | 国产熟女丝袜av | 国产精品视频一区日韩丝袜 | 高清国产一区二区 | 动精品动漫专区3d在线看 | 国产免费女明星色视频 | 91久久精品无码一区二区毛片 | 国产精品v无码a片在线看 | 国产高清午夜人成在线观看 | 精品人妻一区二区三区曰产乱码 | 91精品欧美激情在线播放 | 国产成人经典视频在线 | 国产成人无码久久久天美传媒 | 国产亚洲日韩欧美自拍另类 | 国产成人精品电影午夜 | 国产精品日韩欧美亚洲二区 | 国产精品区网 | 福利视频一区二区三区 | 69式国产真人免费现视频 | 国产a久久精品一区二区三区 | 国产美女被遭强高潮免费网站 | 国产91热爆ts人妖在线 | 国产午夜成人免费看片 | 国产免费无码av片在线观看不 | 2025最新国产不卡a在线播放 | 国产一区二区三区免费在线观看 | av黄色网址在线观看 | 国产成人精品曰本亚洲 | 国产一区二区二区按摩精品啪视 | 69久久夜色精品国产 | 成人午夜影院在线观看 | 99久久婷婷国产综合精品青草 | 国产成人精品一区二区三 | 国偷自产av一区二区三区接 | 国产成人在线观看免费 | 高清无码黄色网站 | 国内视频一区在线播放 | 国产三级电影在线观看 | 国产精品流白浆免费 | 国产免费无码一区二区 | 高清无码日本一区 | 国产毛片网站视频在观 | 国产区日韩欧美 | 国产一区二区在线视频播放 | 国产精品亚洲av | 东京热一精品无码av | 91久久精品无码一区二区免费 | 2025最新无码国产在线 | 国产精品无码无卡毛片不卡视 | 911精品亚洲永久免费精品 | 国产肥熟女视频一区二区视频 | 97人妻天天爽夜夜爽二区 | 国产真实乱对白精彩久久91 | 国产av无码专区亚洲av蜜芽 | 北岛玲日韩精品一区二区三区 | 国产欧美二区三区 | 国产欧美激情一区二区三区 | 2025国产精品91 | 精品无码一区二区三区免费观看 | 精品国产高清a毛片 | 精品无码毛片 | 国产精品美女久久久久浪潮av | 国产精品自产拍在线观看一 | 国产不卡高清视频在线观看 | 国产精品欧美极品中文久久 | 精品无人码麻豆乱码1区2区 | 国产精品高清一区二区三区不卡 | 99久久国产精品免费热6 | 国产成人无码手机在线 | 99久久国产综合精品2025 | 国内精品一区二区三区东京 | 精品人妻在线视频一区二区三区 | a级全黄试看30分钟观看 | 91精品国产高清久久 | 精品久久国产免费影院 | 2025久久精品免费观看 | 国产精品熟女一区二区三区 | 丰满人妻一区二区三区视频 | 国产av无码专区亚洲av桃花庵 | 国产aⅴ无码精品一区二区三区 | av片日韩一区二区三区在线观看 | 国产拍偷自偷在线精品 | 精品国产亚洲一区二区三区在线观看 | 国产熟女亚洲精品麻豆 | 国产人妻精品区一区二区三区 | 成人精品视频免费 | 国产精品无码免费播放在线观看 | 国产在线精品无码二区 | 91极品视频在线观看 | 精品无码成人片一区二区98 | 国产在线精品一区二区高清 | 91高潮一区二区三区高潮九色 | 二区在线观看免费 | 91制片厂果冻星空传媒喜剧 | 国产99er66在线视频 | 加勒比欧美激情欧美精品一区 | 国产精品骚妇青草久久久久 | 国产av无码秘在线 | 国产野外无码理论片在线播放 | 国产精品对白交换绿帽视频 | 国产精品日韩欧美制服 | 国产成人午夜福利电影在线播放 | 国产熟女丝袜高跟视频 | 国产无码免费的中文字幕 | 国产av人妻无码一区二区 | 丰满多毛少妇做爰视 | 换脸国产av一区二区三区 | 2025国产乱人伦在线播放 | 国产激情无码视频在线播放性色 | 国产女主播真实视频在线观看 | 国产在线一区二区观看 | 国产尤物在线观看无码不卡 | 国产欧美日本亚洲精品一5 国产欧美日本亚洲精品一5区 | 国产精品无码一二区不卡免费 | 国产精品一二级 | 高清无码中文字幕影片 | 国产精品国产三级国v麻豆 国产精品国产三级国产aⅴ | 国产无套粉嫩白浆在线观看 | 国产极品精品免费视频久久 | 国产精品白浆冒出视频 | 国产精品大屁股白浆一区二区 | 99久久久精品综合 | 国产午夜福利片一区在线观看 | 国产精品无码一区二区三区毛 | 成人无码精品一区二区三区 | 97人妻在线播放 | 精品久久久久久无码 | 国产精品va在线观看无码电影 | 成人精品免费视频在线观看 | 国产精品亚洲日韩欧美色窝窝色欲 | 丰满老熟好大bbb | 国产v片在线播放免费无遮挡 | 国产精品欧美在线另类小说 | 精品人妻av无码一区二区三 | 国产高清精品无码免费试看 | 国产毛片粗话对白 | 国产三级久久精品三级 | 国产av无码专区 | 国产女主播真实视频在线观看 | 国产亚洲精久久久久久无码浪潮 | 91久久人澡人妻人人澡人人 | 国产粉嫩嫩00在线正在播放 | 2025国产精品一区二区在线 | 国产成人无码v在线播放不卡 | 2025国产自产拍精品露脸不卡 | 国产午夜视频在线 | 国产a视频| 国产亚洲日本人在线观看 | 精品亚洲欧美v国产一区二区 | 国产爽的冒白浆的视频高清 | 99精品伊人久久久大香线蕉 | 国产a亚洲欧美 | 精品无人区麻豆 | 成人影院www蜜桃网站 | 国产一区欧美日韩另类 | 国产精品青草久久久久福利99 | 91国偷自产一区二区三区蜜臀 | 国产毛片一级在线 | 国产一区二区精品尤物 | 国产亚洲综合欧美视频 | 精品人妻无码视频一二三红粉 | 国产精品视频色尤物yw | 国产欧美日韩午夜在线观看 | 91夜色精品偷窥熟女精品网站 | 成人精品天堂一区二区三区 | 99精品热视频 | 国产精品一国产精品免费 | 国产刺激视频在线观看 | 国产99视频精品免费观看 | 国产三级全黄a级视频 | av免费无码在线 | 国产高清一区二区三区视频 | 国产成人综合激情 | 精品福利电影一区二区三区四区 | 91精品欧美在线观看免费 | 国产精品无码一区二区三四区 | 国产无套精品一区二区三区 | 国产高清精品一级毛片 | 精品91一区二区三区 | 国产成人精品高清在线观看98 | 国产91精选在线观看网站 | 极品少妇一区二区三区四区视频 | 国产精品宾馆精品酒店 | a片日韩美女视频免费 | 成人3d动漫在线观看 | 国产日韩一区在线观看视频 | 成人国内精品久久久久影院 | 国产欧美va欧美va香蕉在 | 国产精品自拍色网视频 | 精品欧洲av无码一区二区男男 | 国产美女嫩模在线播 | 高潮好爽视频在线观看 | 国产一区二区国产精品三级 | 国产麻豆秘麻豆 | 国产aⅴ无码专区久久精品国产 | 国产日韩av无码专区aaa | 国产精品亚洲第五区在线 | 2025中文日产幕无线 | 不卡无码在线观看视色 | 成人亚洲欧美成αⅴ人在线观看 | 国产成人高清激情视频在线观看 | 91香蕉国产亚洲一区二区三区 | 国产精品一区二区久久乐下载 | 国产精品宾馆精品酒店 | 国产精品免费不卡av |