精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺析提高.NET垃圾回收性能的幾種方法

開發 后端
這里將分析提高.NET垃圾回收性能的幾種方法,并詳細介紹.NET垃圾回收機制,希望能對大家有所幫助。

對于GC垃圾回收,很多人不會陌生。我們這里講的是提高.NET垃圾回收機制性能的幾種方法,通過研究.NET垃圾回收機制,可以提高程序執行效率。

本文值得閱讀嗎?

通過本文你會理解如何通過finalize dispose模式提升GC算法的性能。下圖顯示完成.NET垃圾回收機制優化后的對比。

完成本文后的對比

介紹和目標

問一下每一個開發人員,在.Net類中清除非托管資源的***位置在哪里?他們中的70%的人員會說放在析構函數。盡管看起來好象是最有希望的位置,但那對性能和內存消耗有巨大的影響。在析構函數中寫清理代碼會導致垃圾回收器再次調用,而且多次(multifold times)影響性能。

為了驗證上面所說,我們先從理論開始,然后我們會真實的看到使用析構函數時如何影響性能。因此我們要理解世代的概念,然后再去看finalize dispose模式。

我相信本文會改變你關于析構函數、dispose 和 finalize處理的看法。

請隨時到 http://www.questpond.com下載我的涵蓋.NET、 ASP.NET、 SQLServer、 WCF、 WPF、WWF的免費500個問題和回答的電子書。

假設

本文使用CLR探測器來探測GC如何工作。如果你對CLR探測器不熟悉,在繼續之前請先閱讀DOTNET1.aspx。

感謝Jeffrey Richter 和 Peter Sollich 先生

讓我們以感謝Jeffery Richter作為本文的開始,因為他深入的解釋了垃圾回收算法如何工作。他曾經寫過兩個關于垃圾回收工作方式的傳奇文章。我很想指出Jeffery Richter在MSDN雜志寫的文章,但因為一些原因并沒有在MSDN顯示出來。所以我給出一個非官方的地址,你可以從http://www.cs.inf.ethz.ch/ssw/files/GC_in_NET.pdf下載PDF格式文章。

同時也感謝Peter Sollich先生,他是CLR性能框架師,為CLR探測器寫了詳細的幫助。當你安裝CLR探測器時,請不要忘記閱讀Peter Sollich寫的詳細幫助文檔。在本文中我們會使用CLR探測器驗證使用finalize對垃圾回收器性能的影響。

非常感謝你們的支持,如果沒有讀你們寫的文章,我就不能完成這篇文章,無論何時我都很樂意聽到你們閱讀文章的評論。

垃圾回收器-幕后英雄

如在介紹中所說,把清理代碼放在析構函數會導致垃圾回收器的兩次調用。許多開發人員會聳聳肩說“我們真的需要去關心垃圾回收器(GC)在后臺做了什么嗎?”,對,如果你寫合適的代碼,我們確實不需要關心垃圾回收。垃圾回收器有保證你的應用程序不受影響的***的算法。但是很多時候,你寫代碼的方式和在你代碼中分配/清理內存資源的方式對垃圾回收算法產生了較大的影響。有時這種影響會導致垃圾回收器(GC)很差的性能,進而導致你應用程序很差的的性能。

因此我們先來看一下在垃圾回收器分配和清理內存時都執行了哪些不同的任務。

假如我們有三個類,類A調用了類B,類B調用了類C。

垃圾回收器分配和清理內存

當應用程序***次執行時,預定義內存分配給應用程序。當應用程序創建這3個對象時,它們被賦于一個內存棧上的地址。你可以從下圖中看到對象創建之前和對象創建之后的內存的樣子。如果還有一個對象D要創建,它會從對象C結束處分配地址。

對象創建之前和對象創建之后的內存

在內部,垃圾回收器為了知道哪些對象是可達的要維護一個對象圖。所有的對象屬于主應用程序的根對象,根對象同樣維護著哪些對象分配了哪些內存地址。如果一個對象使用了其他的對象,那么這個對象也要保存它使用的對象的內存地址。例如,在我們的示例中的對象A使用了對象B,所以對象A保存了對象B的內存地址。

對象圖

現在假如對象A從內存中移除,那么對象A的內存被賦于了對象B,對象B的內存被賦于了對象C。內部的內存分配情況如下所示:

內部的內存分配

隨同內存指針的更新,垃圾回收器需要確保它的內部對象圖也隨著新的內存地址更新了。因此對象圖變成了如下所示的樣子。對垃圾回收器有一些工作要做,它需要確保已經不再使用的對象已經從圖中移除,并且還存在的對象的地址已經在對象樹中全部更新了。

對象圖

除應用程序自定義對象外,構成對象圖表的還有.Net對象,那些對象的地址也是要更新的。.Net運行時對象的數量非常大,下圖就是一個簡單的Hello World控制臺應用程序創建的對象的數量,對象的數量約有1000個,更新每一個對象的指針是一個很大的任務。

Hello World控制臺

世代算法今天、昨天和前天

GC(垃圾回收器)使用世代的概念來提升性能。世代的概念是基于人們處理事情的心理的方式。下面的幾點指出人們是如何處理事情的,并且垃圾回收算法是按相同的方式工作:

如果你今天決定要做一些事情,那么很可能今天就把這些事做完。

如果一些事是昨天未決定的,那么很可能這些事情會給予比較低的優先級并且被再一次推遲。

如果一些事是前天未決定的,那么就有很大的可能性這個事被永遠推遲。

GC以同樣的方式思考并且使用下面的假設:

如果一個對象是新創建的,那么它的生命期可能很短。

如果一個對象是原來存在的,它可能會有更長的生命。

所以說,GC做了三個世代的支持(0代,1代和2)

三個世代的支持

0代包括所有新創建的對象,當應用程序創建對象時,這些對象首先被放入0代對象列表中。當0代對象裝滿時,GC需要運行以釋放內存資源,GC開始構建圖表并刪除所有應用程序不再使用的對象。如果一個對象GC不能在0代刪除,那么該對象會被提升為1代。如果在后面的迭代中一個對象不能在1代中刪除,那么它會被提升為2代。.Net運行時支持的***代是2代。

下面是當你運行CLR探測器時關于世代對象的一個簡單顯示。如果你對CLR探測器不了解,請先從DOTNET1.aspx了解CLR的基本知識。

運行CLR探測器

那么,在優化中世代有什么幫助呢

作為世代中的對象,GC會對哪個世代的對象需要被清理做出選擇。如果你記得,前面小節中我們講過關于GC認定對象世代的假設,GC假設新對象具有更短的生命周期。換句話說,GC主要檢查0代的對象,而不是所有世代的所有對象。

如果清理0代對象不能提供足夠的內存,它將繼而清理1代的對象,并依次繼續。這個算法能大幅提升GC的性能。

關于世代的推論

如果有大量的對象在1代或2代區域則說明內存使用沒有優化。

更大的世代1和世代2區域會導致GC算法性能更差。

使用終結器(finalize)/析構函數會導致更多的1代和2代對象

C#編譯器會把析構函數翻譯(重命名)為終結器。如果你使用IDASM查看IL代碼,就會看到析構函數被重命名為終結器(finalize)。所以讓我們先理解為什么實現析構函數會導致更多的對象進入1代和2代區域?,F在來看處理器是如何工作的:

當新對象創建時,它們被放到0代。

當0代區域填滿時,GC運行并清理內存。

如果對象沒有析構函數,那么如果它們不再被使用,GC就把它們清理掉。

如果對象有終結(finalize)方法,GC就把它們放到終結隊列中。

如果對象是可達的,它會被放置到Freachable隊列中,如果對象是不可達的,內存將被收回。

GC完成本次迭代工作。

下一次當GC開始工作時,它會進入Freachable隊列檢查對象是否可達,如果Freachable中的對象不可達,內存就會被聲名為可收回的。

析構函數的對象

換句話說,有析構函數的對象會在內存中存活更長的時間。

讓我們來看下實際的情況,下面是一個簡單的有析構函數的類。

  1. class clsMyClass
  2. {
  3. public clsMyClass()
  4. {
  5. }
  6. ~clsMyClass()
  7. {
  8. }
  9. }

讓我們用CLR探測器來監視創建100*10000個對象時的情況。

  1. for (int i = 0; i < 100 * 10000; i++)
  2. {
  3. clsMyClass obj = new clsMyClass();
  4. }

如果使用CLR探測器的內存地址報表,會看到大量的對象在1代。

CLR探測器的內存地址報表

現在去掉析構函數后再做一遍。

  1. class clsMyClass
  2. {
  3. public clsMyClass()
  4. {
  5. }
  6. }

你可以看到在0代對象大量增加,同時1代和2代對象很少。

0代對象

如果做一對一的對比,結果如下圖所示:

做一對一的對比

#p#

使用Dispose代替去掉的析構函數

我們可以去掉析構函數而在dispose方法中實現清理代碼。為此要實現‘IDisposable’ 的接口方法,在這寫我們的清理代碼,并如下代碼段所示調用終結方法。

‘SuppressFinalize’指示GC不要調用finalize方法,所以不會發生GC的二次調用。

  1. class clsMyClass : IDisposable
  2. {
  3. public clsMyClass()
  4. {
  5. }
  6. ~clsMyClass()
  7. {
  8. }
  9. public void Dispose()
  10. {
  11. GC.SuppressFinalize(this);
  12. }
  13. }
現在客戶端要確保它要象如下所示調用dispose方法。
  1. for (int i = 0; i < 100 ; i++)
  2. {
  3. clsMyClass obj = new clsMyClass();
  4. obj.Dispose();
  5. }
下圖是使用析構函數和使用dispose時的0代和1代對象如何分布的對比。你會看到0代內存分配有明顯的提升,這標識著更好的內存分配。

內存分布對比

如果開發人員忘記調用Dispose

這不是一個***的世界,我們不能確保在客戶端總是調用了dispose方法。這就是下面的小節中我們要使用Finalize / Dispose模式的原因。

關于這個模式在http://msdn.microsoft.com/en-us/library/b1yfkh5e(VS.71).aspx.有詳細的實現。

下面看起來更象是如何實現finalize / dispose模式。

  1. class clsMyClass : IDisposable
  2. {
  3. public clsMyClass()
  4. {
  5. }
  6. ~clsMyClass()
  7. {
  8. // In case the client forgets to call
  9. // Dispose , destructor will be invoked for
  10. Dispose(false);
  11. }
  12. protected virtual void Dispose(bool disposing)
  13. {
  14. if (disposing)
  15. {
  16. // Free managed objects.
  17. }
  18. // Free unmanaged objects
  19. }
  20. public void Dispose()
  21. {
  22. Dispose(true);
  23. // Ensure that the destructor is not called
  24. GC.SuppressFinalize(this);
  25. }
  26. }

代碼解釋:

我們定義了一個帶布爾參數的Dispose方法,該參數說明是從Dispose中調用還是從析構函數中調用。如果是從’Dispose’方法調用,則釋放所有的托管和非托管的資源。

如果該方法是從析構函數中調用,則只釋放非托管的資源。

在dispose方法中我們禁用了finilize的調用,并且用true參數調用了這個dispose方法。

在析構函數中我們使用false值調用dispose函數。換句話說,我們假定GC會處理好托管的資源并用析構函數調用來清理非托管資源。

換句話說,客戶端沒有調用dispose函數,析構函數會照顧清除非托管資源。

結論

不要在類中寫空的析構函數。

如果你需要清除,使用帶‘SupressFinalize’方法調用的finalize dispose模式。

如果類有公開的dispose方法,確保在客戶端代碼中調用它。

應用程序應該分配在0代區域中的對象比分配在1代和2代區域中的對象更多。如果在1代和2代區域中有更多的對象,標志著很差的GC算法執行。

源代碼

可以在這里找到dispose模式的示例代碼

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Shivprasad koirala

[[6016]]


Member

原文標題:.net***實踐二:使用finalize/dispose模式提升垃圾回收器性能

鏈接:http://www.cnblogs.com/mickeychang/archive/2009/09/17/1568670.html

【編輯推薦】

  1. 簡述C# XML解析方法的特點及應用
  2. .NET對象的XML序列化和反序列化概念淺析
  3. .NET對象的XML序列化和反序列化實例詳解
  4. C# XML序列化實例淺析
  5. .NET序列化和反序列化基礎知識總結
責任編輯:彭凡 來源: 博客園
相關推薦

2009-07-20 17:07:30

提高ASP.NET性能

2021-03-03 08:13:57

模式垃圾回收

2009-06-23 14:15:00

Java垃圾回收

2009-09-24 14:59:38

C#編寫COM組件

2019-12-12 21:45:17

javascript前端css

2010-01-05 18:49:57

.NET Framew

2009-07-28 16:07:40

.NET圖片快速處理

2009-02-25 09:52:14

類型轉換.NET 強制轉型

2010-09-08 13:53:10

.NET連接Sybas

2012-12-18 13:57:42

.NetC#

2009-09-04 11:20:47

ASP.NET頁面間值

2009-10-14 14:37:56

調試.NET程序

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2009-07-03 13:22:37

調用Servlet

2020-03-13 08:00:00

.NET對象清理垃圾回收

2009-07-27 14:41:33

ASP.NET調用存儲

2021-11-25 07:01:57

.NET開發編程

2009-07-29 11:33:14

ASP.NET技巧ASP.NET應用程序

2011-05-24 15:15:12

mysql性能

2009-07-24 16:40:14

ASP.NET軟件開發
點贊
收藏

51CTO技術棧公眾號

仙踪林久久久久久久999| 深夜成人福利| 成人av在线影院| 欧美亚洲国产视频小说| av手机在线播放| 国产成人a视频高清在线观看| 亚洲蜜臀av乱码久久精品蜜桃| 国产精品日韩一区二区三区 | av在线免费观看不卡| 蜜桃视频m3u8在线观看| 国产精品毛片久久久久久| 99中文视频在线| 中文字幕乱码人妻无码久久 | 国产精品国产精品国产专区不片| 国产精品swag| 11024精品一区二区三区日韩| 精品91视频| 色偷偷888欧美精品久久久| 少妇熟女视频一区二区三区 | 欧美精品日韩在线| 视频在线观看免费影院欧美meiju| 精品女同一区二区三区在线播放| 这里只有精品66| 你懂的在线视频| 国产福利一区在线| 国产欧美日韩丝袜精品一区| 国产特黄大片aaaa毛片| 一区二区三区四区日韩| 亚洲男人第一av网站| 折磨小男生性器羞耻的故事| 亚洲在线资源| 欧美在线观看一区| 男人靠女人免费视频网站| 丝袜美女在线观看| 日韩理论片网站| 亚洲午夜精品久久| 国产区视频在线播放| 成人avav影音| 国产精品.com| 人妻无码一区二区三区久久99| 精品亚洲国产成人av制服丝袜 | 日本一区二区三区四区| 精品国产一区二区三区麻豆小说 | 91精品国产91久久久久久密臀| 亚洲天堂免费视频| 91精品小视频| 日韩电影在线观看完整免费观看| 日韩欧美123| 欧美污在线观看| 国产一区二区av在线| 欧美久久久久中文字幕| 午夜免费看视频| 精品乱码一区二区三区四区| 91黄色免费观看| 成人免费毛片播放| 欧美三级精品| 欧美日韩中文字幕一区二区| 三上悠亚av一区二区三区| 78精品国产综合久久香蕉| 欧美私人免费视频| 色噜噜狠狠一区二区| 伊人久久一区| 日韩一区二区三区在线观看| 在线观看一区二区三区视频| 最新亚洲国产| 亚洲成人精品av| 久久偷拍免费视频| 欧美女优在线视频| 色黄久久久久久| 国产午夜手机精彩视频| 欧美精品偷拍| 国产91av在线| 伊人久久一区二区| 国产精品自产自拍| 国产一区二区三区高清视频| 日本福利片在线| 中文字幕精品一区二区三区精品| 亚洲欧美日韩精品久久久| 国内外激情在线| 亚洲图片欧美视频| 国产成人无码av在线播放dvd| 亚洲精品一区三区三区在线观看| 3d成人动漫网站| 国产精品成人无码专区| 国产亚洲欧美日韩在线观看一区二区 | 国产精品国产亚洲伊人久久 | japansex久久高清精品| 精品91自产拍在线观看一区| 亚洲永久精品ww.7491进入| 久久精品国产68国产精品亚洲| 欧美成人h版在线观看| 激情五月色婷婷| 麻豆精品新av中文字幕| 国产精品二区在线观看| 精品人妻伦一二三区久久 | 亚洲美女炮图| 欧美高清视频www夜色资源网| 337p日本欧洲亚洲大胆张筱雨| 一区二区三区视频免费观看| 超碰97人人做人人爱少妇| 亚洲精品1区2区3区| 韩国成人在线视频| 欧美成人免费在线| 在线免费观看污| 91精品1区2区| 一级黄色电影片| 日韩极品一区| 欧美中在线观看| www.国产欧美| 国产精品成人一区二区艾草| 欧美日韩一道本| 日本成人手机在线| 伊人久久久久久久久久| 国产无遮挡又黄又爽又色| 久久精品国产**网站演员| 精品视频高清无人区区二区三区| 日本网站在线免费观看视频| 色综合咪咪久久| 中文字幕无人区二| 国产精品久久久久久| 全亚洲最色的网站在线观看| 高清毛片aaaaaaaaa片| 综合色中文字幕| 欧美特级aaa| 久久成人高清| 欧美亚洲成人精品| 三级视频在线看| 一级女性全黄久久生活片免费| 久久婷五月综合| 禁果av一区二区三区| 1769国产精品| 午夜影院免费体验区| 一区二区三区蜜桃网| 四虎1515hh.com| 66国产精品| 91精品视频网站| 欧美一区二区三区| 欧美人与性动xxxx| 国产wwwwxxxx| 久久se精品一区二区| 亚洲欧美日韩综合一区| 国产韩日精品| 伊人久久综合97精品| 无码人妻精品一区二区三区9厂| 99国产精品99久久久久久| 妺妺窝人体色www看人体| 日本高清久久| 欧美日本在线视频中文字字幕| 国产伦理一区二区| 亚洲激情欧美激情| 国产精品日日摸夜夜爽| 亚洲第一网站| 精品中文字幕人| 17videosex性欧美| 亚洲国产成人精品久久| 青青草成人av| 国产拍欧美日韩视频二区| 国产精品视频黄色| 欧美成人自拍| 999热视频| 波多野结依一区| 亚洲美女福利视频网站| 中国女人真人一级毛片| 国产精品激情偷乱一区二区∴| 亚洲综合av在线播放| 自产国语精品视频| 成人自拍视频网站| xx欧美xxx| 日韩中文字幕国产| 午夜精品久久久久久久第一页按摩| 一级日本不卡的影视| 一本色道久久综合亚洲精品图片| 久久精品导航| 中文字幕av导航| 国产66精品| 日本精品va在线观看| a√资源在线| 精品少妇一区二区三区| 日韩人妻精品中文字幕| 中文字幕在线免费不卡| 少妇献身老头系列| 日韩精品欧美成人高清一区二区| 樱花www成人免费视频| 日韩区欧美区| 青青草原成人在线视频| 久久黄色美女电影| 精品国产91九色蝌蚪| 丰满熟女人妻一区二区三| 一区二区三区在线视频观看| 亚洲国产无码精品| 精品一区二区三区在线观看国产| 婷婷五月综合缴情在线视频| 成人午夜av| 国内成+人亚洲| 亚洲精品三区| 热re91久久精品国99热蜜臀| 国产福利在线播放麻豆| 亚洲欧美国内爽妇网| 精品国精品国产自在久不卡| 在线观看中文字幕不卡| 久久久久99精品| 国产精品久久久99| 日本免费福利视频| 国产成人午夜精品影院观看视频 | 亚洲一区第一页| 亚洲黄色小说网| 欧美三级中文字幕在线观看| 国产精品成人网站| 日韩理论片一区二区| 公肉吊粗大爽色翁浪妇视频| 成人综合在线视频| 一区二区久久精品| 日韩在线一区二区| 日本中文字幕网址| 欧美91大片| youjizz.com亚洲| 成人一区而且| 日本高清视频一区二区三区| 久草精品视频| 国产精品久久久久久久久久久久冷| 欧美xxxx性| 国产精品久久久久久网站| 色是在线视频| 欧美精品18videos性欧| av免费看在线| 久久在线视频在线| 免费在线看a| 北条麻妃一区二区三区中文字幕 | 色综合男人天堂| 精品视频在线一区二区| 深夜精品寂寞黄网站在线观看| 免费在线国产| 亚洲免费中文字幕| 黄色小视频在线免费观看| 亚洲女同精品视频| 男人的天堂av高清在线| 亚洲精品日韩在线| 牛牛热在线视频| 一本一本久久a久久精品牛牛影视| 亚洲色图21p| 亚洲乱码一区av黑人高潮| 水莓100国产免费av在线播放| 亚洲成人网久久久| 日韩中文字幕免费观看| 亚洲精品国产精品国产自| 天天综合网天天综合| 日韩精品在线视频观看| 欧美日韩在线中文字幕| 国产一区二区动漫| 97超碰国产一区二区三区| 日韩亚洲国产中文字幕| 里番在线观看网站| 久久久国产视频91| 羞羞视频在线观看不卡| 欧美劲爆第一页| 亚洲精品88| 国产精品主播视频| 国产精品一区二区三区av| 亚洲xxx自由成熟| 天堂精品久久久久| 国产综合色一区二区三区| 亚洲黄页网站| 一区二区三区av| 欧美黄在线观看| 水蜜桃色314在线观看| 另类激情亚洲| 天天综合网久久| 国产成人在线视频网站| av网站有哪些| 欧美激情一区在线观看| 四虎影院中文字幕| 午夜精品影院在线观看| 天堂网一区二区| 欧美一区二区三区思思人 | 一区二区三欧美| 超碰porn在线| 2019中文字幕在线| 欧美风情在线视频| 国产精品一国产精品最新章节| 久草精品在线| 中国一级大黄大黄大色毛片| 一本色道久久综合| 天堂中文av在线| 国产在线91| 亚洲欧洲成视频免费观看| 麻豆网在线观看| 91av在线国产| 在线观看欧美| 欧美一区国产一区| 欧美福利视频| www.xxx亚洲| 成人免费精品视频| 精品伦精品一区二区三区视频密桃| 亚洲一区在线免费观看| 久久久久久亚洲av无码专区| 日韩欧美在线网站| 国产高清视频在线| 久久久亚洲影院| 亚洲欧洲二区| 欧美专区一二三 | 久久久久久人妻一区二区三区| 日韩av一级电影| 免费的av网站| 亚洲黄网站在线观看| 中文字幕人妻精品一区| 亚洲精品国精品久久99热| 成人video亚洲精品| 日本一区二区不卡| 国产乱人伦精品一区| 这里只有精品66| 日韩av不卡一区二区| 日本黄色动态图| 亚洲男人的天堂网| 日本黄色一级视频| 日韩精品黄色网| 国产色婷婷在线| 成人精品视频久久久久 | 久久国产精品免费观看| 人人爽香蕉精品| 三上悠亚ssⅰn939无码播放| 亚洲国产wwwccc36天堂| 精品人妻无码一区二区三区蜜桃一 | 精品国产31久久久久久| av网站在线免费看| 久久精品国产免费观看| 成人在线观看免费播放| 欧美日韩在线精品| 国产日韩1区| 国产又黄又粗又猛又爽的视频 | 亚洲人成小说网站色在线 | 伊人久久大香线蕉精品| 日韩影院精彩在线| 一区二区三区伦理片| 一本大道久久a久久综合婷婷| 日韩一卡二卡在线| 97视频在线观看免费| 菁菁伊人国产精品| 妞干网在线视频观看| 99视频精品全部免费在线| 国产一级免费观看| 日韩视频免费直播| 七七久久电影网| 成人黄色片视频网站| 精品91久久久久| 久久人人爽人人人人片| 一本大道久久a久久精二百| 黄色软件在线| 国产精品视频自拍| 99视频精品视频高清免费| 亚洲一区二区偷拍| 一区二区三区四区激情| 亚洲精品久久久久久动漫器材一区| 欧美成人手机在线| 在线观看视频一区二区三区| 国产美女主播在线播放| 99久久国产免费看| 草莓视频18免费观看| 国产一区二区三区精品久久久| 国产91亚洲精品久久久| av中文字幕av| 不卡区在线中文字幕| 精品人妻无码一区二区性色| 亚洲午夜av电影| 亚洲爽爆av| 国产一线二线三线女| 91在线看国产| 天天天天天天天干| 久久天天躁狠狠躁夜夜躁| jazzjazz国产精品久久| 欧美亚洲另类色图| 国产精品卡一卡二卡三| а√中文在线资源库| 欧美亚洲在线视频| 天天射—综合中文网| 午夜不卡久久精品无码免费| 91福利精品第一导航| xvideos国产在线视频| 国产欧美日韩综合精品二区| 日韩高清一级片| 国产精品久久久久久久精| 亚洲第一精品电影| 国模私拍国内精品国内av| 黄色激情在线视频| 国产日韩欧美精品在线| 成人1区2区3区| 国产成人精品国内自产拍免费看| 久久久久久久久久久久久久| 免费的av网站| 3atv在线一区二区三区| 自拍视频在线看| 一级性生活视频| 国产午夜亚洲精品理论片色戒 | 经典三级久久| 国产日产欧美视频| 亚洲三级在线播放| 猫咪在线永久网站| 国产精品白丝jk白祙| 麻豆91在线观看| wwwwww国产| 欧美日韩第一页|