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

.NET 性能優(yōu)化的技巧

開發(fā) 前端
內(nèi)聯(lián)是將方法體(method body)復(fù)制到調(diào)用站點(diǎn)的技術(shù),這樣我們就可以避免跳轉(zhuǎn)、參數(shù)傳遞和寄存器保存/恢復(fù)等繁瑣過程。

最大化內(nèi)聯(lián)

內(nèi)聯(lián)是將方法體(method body)復(fù)制到調(diào)用站點(diǎn)的技術(shù),這樣我們就可以避免跳轉(zhuǎn)、參數(shù)傳遞和寄存器保存/恢復(fù)等繁瑣過程。除了節(jié)省這些之外,內(nèi)聯(lián)還是實(shí)現(xiàn)其他優(yōu)化的必要條件。 不不過Roslyn(C#的編譯器)沒有內(nèi)聯(lián)代碼,它是通過JIT實(shí)現(xiàn)的,大多數(shù)優(yōu)化也是如此。

[[274382]]

使用靜態(tài)投擲助手(static throw helper)

最近的變化涉及一個(gè)重要的重構(gòu),在序列化基準(zhǔn)的調(diào)用持續(xù)時(shí)間上增加了大約20ns,從~130ns增加到了~150ns。

罪魁禍?zhǔn)资沁@個(gè)助手方法中添加的throw語句:

  1. public static Writer<TBufferWriter> CreateWriter<TBufferWriter>( 
  2.     this TBufferWriter buffer, 
  3.     SerializerSession session) where TBufferWriter : IBufferWriter<byte> 
  4.     if (session == null) throw new ArgumentNullException(nameof(session)); 
  5.     return new Writer<TBufferWriter>(buffer, session); 

當(dāng)助手方法中包含throw語句時(shí),JIT不會內(nèi)聯(lián)它。解決這個(gè)問題的常見技巧是添加一個(gè)靜態(tài)的“throw helper”方法,來完成一些棘手的工作,所以最終結(jié)果如下所示:

  1. public static Writer<TBufferWriter> CreateWriter<TBufferWriter>( 
  2.     this TBufferWriter buffer, 
  3.     SerializerSession session) where TBufferWriter : IBufferWriter<byte> 
  4.     if (session == null) ThrowSessionNull(); 
  5.     return new Writer<TBufferWriter>(buffer, session); 
  6.  
  7.     void ThrowSessionNull() => throw new ArgumentNullException(nameof(session)); 

代碼庫在許多地方使用這個(gè)技巧,將throw語句放在一個(gè)單獨(dú)的方法中可能會有其他好處,例如比如改善常用代碼路徑的位置。

最小化虛擬或接口調(diào)用

虛擬調(diào)用比直接調(diào)用慢,如果你正在編寫一個(gè)關(guān)鍵系統(tǒng),那么很可能會在分析器中看到虛擬調(diào)用的過程。首先,虛擬調(diào)用需要間接調(diào)用。

去虛擬化是許多JIT編譯器的一個(gè)特性,RyuJIT也不例外。然而,這是一個(gè)復(fù)雜的功能,并且RyuJIT目前可以證明(自身)方法可以被虛擬化并因此成為內(nèi)聯(lián)的候選者的情況并不多。以下是利用虛擬化的一些常規(guī)技巧,但我確信還有更多。

1. 默認(rèn)情況下將類標(biāo)記為sealed,當(dāng)一個(gè)類/方法被標(biāo)記為sealed時(shí),RyuJIT可以將其考慮在內(nèi)并且可能能夠內(nèi)聯(lián)一個(gè)方法調(diào)用。RyuJIT很可能成為下一代的JIT編譯器。64位計(jì)算已是大勢所趨,即使它并不總是比32位更快或更有效率。當(dāng)前的.NET JIT編譯器就是一個(gè)使得64位計(jì)算機(jī)上有時(shí)導(dǎo)致程序速度減慢的的例子。但是,這將會被改變:一個(gè)新的,下一代x64的JIT編譯器編譯代碼的速度將加快兩倍,它將改變你對64位.NET代碼的印象。

2. 如果可能,將覆蓋(override)方法標(biāo)記為sealed。override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個(gè)方法并且對其重寫,以求達(dá)到不同的作用。對我們來說最熟悉的覆蓋就是對接口方法的實(shí)現(xiàn),在接口中一般只是對方法進(jìn)行了聲明,而我們在實(shí)現(xiàn)時(shí),就需要實(shí)現(xiàn)接口聲明的所有方法。除了這個(gè)典型的用法以外,我們在繼承中也可能會在子類覆蓋父類中的方法。

3. 使用具體類型而不是接口,具體類型為JIT提供了更多信息,因此它更有可能內(nèi)聯(lián)你的調(diào)用。

4. 在同一方法中實(shí)例化和使用非sealed對象(而不是使用'create'方法),當(dāng)類型明確已知時(shí),比如構(gòu)造之后,RyuJIT可以對非sealed方法調(diào)用進(jìn)行虛擬化。

5. 對多態(tài)類型使用泛型類型約束,以便可以使用具體類型對它們進(jìn)行專門處理,并且可以對接口調(diào)用進(jìn)行非虛擬化。在Hagar中,我們的核心編寫器類型定義如下:

  1. public ref struct Writer<TBufferWriter> where TBufferWriter : IBufferWriter<byte> 
  2.     private TBufferWriter output
  3.     // --- etc --- 

所有對CIL中Roslyn發(fā)出的輸出方法的調(diào)用之前都會有一條約束指令,該指令告訴JIT,該調(diào)用可以對TBufferWriter上定義的精確方法進(jìn)行調(diào)用,而不是進(jìn)行虛擬/接口調(diào)用。這有助于去虛擬化。結(jié)果,所有對在輸出上定義的方法的調(diào)用都被成功地去虛擬化。下面是由JIT團(tuán)隊(duì)的Andy Ayers 編寫的CoreCLR線程,它詳細(xì)描述了當(dāng)前和未來的去虛擬化工作。

減少分配

.NET的垃圾收集器是一項(xiàng)很偉大的項(xiàng)目, 垃圾收集器是 允許對一些無鎖數(shù)據(jù)結(jié)構(gòu)進(jìn)行算法優(yōu)化,并且還可以刪除整個(gè)類的錯(cuò)誤并減輕開發(fā)人員的認(rèn)知負(fù)擔(dān)。總之,垃圾收集是一種非常成功的內(nèi)存管理技術(shù)。

.NET使用bump分配器,其中每個(gè)線程通過找到各自的指針來從每個(gè)線程上下文中分配對象。因此,當(dāng)在同一線程上分配和使用短期分配時(shí),可以更好的實(shí)現(xiàn)局部緩存(cache locality)機(jī)制。

有關(guān).NET 垃圾收集器的更多信息,請點(diǎn)此了解。

對象池(Object Pool) 或緩沖池(Buffer Pool)

Hagar本身并不管理緩沖區(qū),而是將責(zé)任轉(zhuǎn)移給用戶。這聽起來可能很麻煩,但實(shí)際上并不麻煩,因?yàn)樗cSystem.IO.Pipelines兼容。因此,我們可以利用默認(rèn)管道通過System.Buffers.ArrayPool 提供的高性能緩沖池。

一般來說,重復(fù)使用緩沖區(qū)可以減輕垃圾收集器的壓力。

避免裝箱

盡可能不要通過將值類型轉(zhuǎn)換為引用類型來裝箱值類型。這是常見的建議,但在API設(shè)計(jì)中需要考慮一些因素。在Hagar中,可以接受值類型的接口和方法定義是通用的,以便它們可以專門用于精確類型并避免裝箱/拆箱成本。結(jié)果,沒有熱路徑拳擊。在某些情況下仍然存在拳擊,例如異常方法的字符串格式。可以通過對參數(shù)的顯式. tostring()調(diào)用來刪除那些特定的裝箱分配。

減少關(guān)閉分配

只分配閉包一次,并存儲結(jié)果,就可供多次重復(fù)使用。例如,通常將委托傳遞給ConcurrentDictionary. getoradd。與其將委托編寫為內(nèi)聯(lián)lambda,還不如將define定義為類中的私有字段。下面是來自Hagar中可選ISerializable支持包的一個(gè)例子:

  1. private readonly Func<Type, Action<object, SerializationInfo, StreamingContext>> createConstructorDelegate; 
  2.  
  3. public ObjectSerializer(SerializationConstructorFactory constructorFactory) 
  4.     // Other parameters/statements omitted. 
  5.     this.createConstructorDelegate = constructorFactory.GetSerializationConstructorDelegate; 
  6.  
  7. // Later, on a hot code path: 
  8. var constructor = this.constructors.GetOrAdd(info.ObjectType, this.createConstructorDelegate); 

盡量減少復(fù)制

.NET Core 2.0和2.1以及最近的C#版本,在刪除數(shù)據(jù)復(fù)制過程的方面取得了相當(dāng)大的進(jìn)步。最值得注意的是Span,但在參數(shù)修飾符和只讀結(jié)構(gòu)中也值得一提。Span 是ref 結(jié)構(gòu)堆棧,而不是托管堆上分配。

使用Span來避免數(shù)組分配并避免數(shù)據(jù)復(fù)制

一個(gè)Span表示任意內(nèi)存的相鄰區(qū)域, 一個(gè)Span實(shí)例通常用來保存數(shù)組的元素或數(shù)組的一部分。

對于.NET Core來說,Span對于性能優(yōu)化非常重要,它們使用優(yōu)化的表示來減小它們的大小,這需要添加對內(nèi)部指針的垃圾收集器的支持。內(nèi)部指針是指向數(shù)組范圍內(nèi)的托管引用,而不是只能指向第一個(gè)元素,因此需要一個(gè)包含數(shù)組偏移量的附加字段。有關(guān)Span的更多信息,請點(diǎn)此參考。

Hagar廣泛使用Span,因?yàn)樗试S我們創(chuàng)建可用于較大緩沖區(qū)的分段試圖。

通過ref傳遞結(jié)構(gòu)以最小化堆棧上的副本

Hagar使用兩個(gè)主要結(jié)構(gòu),Reader 和Writer。這些結(jié)構(gòu)包含幾個(gè)字段,幾乎每次調(diào)用都會傳遞給序列化或反序列化調(diào)用路徑。

在沒有干預(yù)的情況下,使用這些結(jié)構(gòu)進(jìn)行的每個(gè)方法調(diào)用都會帶來很大的影響,因?yàn)槊總€(gè)調(diào)用都需要將整個(gè)結(jié)構(gòu)復(fù)制到堆棧中。

我們可以通過將這些結(jié)構(gòu)作為ref參數(shù)傳遞來避免副本的產(chǎn)生,另外,C#還支持使用ref this作為擴(kuò)展方法的目標(biāo),這非常方便。據(jù)我所知,沒有辦法確保特定的結(jié)構(gòu)類型總是由ref傳遞,如果你不小心在調(diào)用的參數(shù)列表中省略了ref,這可能會導(dǎo)致運(yùn)行錯(cuò)誤。

避免保護(hù)性拷貝(defensive copy)

Roslyn有時(shí)需要做一些工作來保證一些語言不變量,當(dāng)結(jié)構(gòu)存儲在只讀字段中時(shí),編譯器將插入一些指令,以避免復(fù)制該字段,然后再將其包含到任何能保證不會對其進(jìn)行修改的操作中。通常,這意味著調(diào)用在結(jié)構(gòu)類型本身上定義的方法,因?yàn)閷⒔Y(jié)構(gòu)作為參數(shù)傳遞給在另一類型上定義的方法已經(jīng)需要將結(jié)構(gòu)復(fù)制到堆棧上(除非通過ref或in傳遞)。

如果將 7.2 添加到csproj文件中,則可以將結(jié)構(gòu)定義為只讀結(jié)構(gòu)(這是c# 7.2的語言特性),則可以避免保護(hù)性拷貝。

有時(shí),如果你無法將其定義為只讀結(jié)構(gòu),則最好在其他不可變結(jié)構(gòu)字段上省略readonly修飾符。

以Jon Skeet的NodaTime庫為例,在這個(gè)示例中,Jon使大多數(shù)結(jié)構(gòu)變?yōu)橹蛔x,因此能夠?qū)eadonly修飾符添加到包含這些結(jié)構(gòu)的字段中,而不會對性能產(chǎn)生負(fù)面影響。

減少分支和分支錯(cuò)誤預(yù)測

現(xiàn)代cpu依賴于長pipeline的指令,這些指令通過并發(fā)性進(jìn)行處理。這涉及到CPU分析指令,以確定哪些指令不依賴于前面的指令,還涉及猜測將采用哪些條件跳轉(zhuǎn)語句。為此,CPU使用一個(gè)名為分支預(yù)測器(branch predictor)的組件,該組件負(fù)責(zé)猜測將采用哪個(gè)分支。它通常通過讀取和寫入表中的條目來實(shí)現(xiàn)這一點(diǎn),并根據(jù)上次執(zhí)行條件跳轉(zhuǎn)時(shí)發(fā)生的情況修改其預(yù)測。

當(dāng)預(yù)測正確時(shí),就會加快進(jìn)程,否則就需要把預(yù)測分支的指令排空,重新獲取正確分支的指令進(jìn)入pipeline繼續(xù)執(zhí)行。

所以加快進(jìn)程的最好辦法就是減少分支和分支錯(cuò)誤預(yù)測,首先嘗試最小化分支數(shù)量,如果無法消除分支,請盡量減少錯(cuò)誤預(yù)測率,這可能涉及使用排序數(shù)據(jù)或重構(gòu)代碼,可以用查找的辦法來代替分支預(yù)測。

其他雜項(xiàng)提示

1. 避免使用LINQ,LINQ在應(yīng)用程序代碼方面很出色,但在庫/框架代碼中很少被用于路徑。LINQ很難對JIT進(jìn)行優(yōu)化(IEnumerable..),而且傾向于多多分配。

2. 使用具體類型而不是接口或抽象類型,也許最常見的是,如果你在List 上進(jìn)行迭代,最好不要先將該列表強(qiáng)制轉(zhuǎn)換為IEnumerable (例如,通過使用LINQ或?qū)⑵渥鳛镮Enumerable 參數(shù)傳遞給方法)。這樣做的原因是使用foreach枚舉列表使用非分配List .Enumerator結(jié)構(gòu),但是當(dāng)它轉(zhuǎn)換為IEnumerable 時(shí),該結(jié)構(gòu)必須被裝箱到IEnumerator for foreach。

3. 反射在庫代碼中特別有用,緩存反射結(jié)果,考慮使用IL或Roslyn為訪問器生成委托,或者更好的方法是使用現(xiàn)有的庫,如Microsoft.Extensions.ObjectMethodExecutor.Sources,Microsoft.Extensions.PropertyHelper.Sources或FastMember。

特定于庫的優(yōu)化

優(yōu)化生成的代碼

Hagar使用Roslyn為要序列化的POCO生成C#代碼,這個(gè)C#代碼在編譯時(shí)包含在你的項(xiàng)目中。我們可以對生成的代碼執(zhí)行一些優(yōu)化,以加快速度。

通過跳過對已知類型的編解碼器查找來避免虛擬調(diào)用

當(dāng)復(fù)雜對象包含眾所周知的字段(如int,Guid,string)時(shí),代碼生成器將直接插入對這些類型的手動編碼編解碼器的調(diào)用,而不是調(diào)用CodecProvider來檢索該類型的IFieldCodec 實(shí)例。這允許JIT內(nèi)聯(lián)那些調(diào)用,并避免了虛擬/接口間接。

在運(yùn)行時(shí)專門化泛型類型

與上面類似,代碼生成器可以生成在運(yùn)行時(shí)使用專門化的代碼。

預(yù)先計(jì)算常數(shù)值以消除某些分支

在序列化期間,每個(gè)字段都帶有一個(gè)標(biāo)頭,通常是一個(gè)字節(jié)。它會告訴解串器哪個(gè)字段是編碼的。此字段標(biāo)題包含3條信息:字段的規(guī)格(固定寬度、長度前綴、標(biāo)記分隔、引用等),字段的模式類型(預(yù)期、眾所周知、以前定義的、編碼)用于多態(tài),并將最后3位專用于編碼字段id(如果它小于7)。在許多情況下,可以確切地知道在編譯時(shí)這個(gè)標(biāo)頭字節(jié)是什么。如果字段具有值類型,那么我們就知道運(yùn)行時(shí)類型永遠(yuǎn)不能與字段類型不同,并且始終知道字段id。

因此,我們通常可以保存計(jì)算標(biāo)頭值所需的所有工作,并可以直接將其作為常量嵌入到代碼中。這樣可以節(jié)省分支并且通常會消除大量的中間語言代碼。

選擇適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)

通過切換到結(jié)構(gòu)數(shù)組,很大程度上消除了索引和維護(hù)集合的成本,并且參考跟蹤不再出現(xiàn)在基準(zhǔn)測試中。這有一個(gè)缺點(diǎn),對于大型對象圖,這種新方法可能較慢。

選擇合適的算法

Hagar花費(fèi)大量時(shí)間對可變長度整數(shù)進(jìn)行編碼/解碼,這種方法被稱為varints,varints是用一個(gè)或多個(gè)字節(jié)序列化整形的一種方法,以減小有效載荷的大小。許多二進(jìn)制序列化器使用這種技術(shù),包括協(xié)議緩沖區(qū)。甚至.NET的BinaryWriter也使用這種編碼。下面是參考資料的一小段:

  1. protected void Write7BitEncodedInt(int value) { 
  2.     // Write out an int 7 bits at a time.  The high bit of the byte, 
  3.     // when on, tells reader to continue reading more bytes. 
  4.     uint v = (uint) value;   // support negative numbers 
  5.     while (v >= 0x80) { 
  6.         Write((byte) (v | 0x80)); 
  7.         v >>= 7; 
  8.     } 
  9.     Write((byte)v); 

我想指出ZigZag編碼對于包含負(fù)值的有符號整數(shù)可能更有效,而不是強(qiáng)制轉(zhuǎn)換為uint。

這些序列化器中的變量使用稱為Little Endian Base-128或LEB128的算法,該算法每字節(jié)編碼多達(dá)7位。它使用每個(gè)字節(jié)的最高有效位來指示是否跟隨另一個(gè)字節(jié)(1 =是,0 =否)。這是一種簡單的格式,但可能不是最快的。不過PrefixVarint更快,使用PrefixVarint,所有來自LEB128的1都是在有效載荷的開頭一次性寫入的。這可能讓我們使用硬件內(nèi)在函數(shù)來提高這種編碼和解碼的速度。通過將大小信息往前移,我們也可以從有效載荷中一次讀取更多字節(jié),從而減少內(nèi)部壓力并提高性能。

 

責(zé)任編輯:武曉燕 來源: 嘶吼
相關(guān)推薦

2018-02-23 13:55:16

ASP.NET性能優(yōu)化技巧

2009-06-16 16:39:49

Hibernate性能

2019-02-25 07:07:38

技巧React 優(yōu)化

2012-07-23 10:22:15

Python性能優(yōu)化優(yōu)化技巧

2009-12-09 17:33:22

PHP性能優(yōu)化

2013-06-08 14:19:05

性能優(yōu)化KVM

2011-07-11 15:26:49

性能優(yōu)化算法

2024-01-22 13:16:00

接口性能優(yōu)化本地緩存

2010-07-26 16:35:34

Perl性能

2009-11-27 13:24:20

PHP代碼性能優(yōu)化

2022-10-09 13:36:44

接口性能優(yōu)化

2024-10-09 23:32:50

2011-06-14 11:14:10

性能優(yōu)化代碼

2011-06-14 14:17:23

性能優(yōu)化系統(tǒng)層次

2011-06-14 13:48:07

性能優(yōu)化工具

2011-06-14 14:32:46

性能優(yōu)化

2022-02-25 23:46:54

JavaScript網(wǎng)站開發(fā)

2019-03-21 14:18:38

iOS開發(fā)優(yōu)化原因

2022-12-30 15:29:35

數(shù)據(jù)分析工具Pandas

2020-03-25 08:00:32

Kubernetes節(jié)點(diǎn)工作
點(diǎn)贊
收藏

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

成人在线播放av| 在线观看日韩专区| 奇米精品一区二区三区| 欧美视频综合| 久久99最新地址| 欧美激情视频一区| 妺妺窝人体色WWW精品| 亚洲伦理久久| 精品福利免费观看| 亚洲欧美99| 亚洲伦理在线观看| 日韩精品色哟哟| 久久99亚洲热视| 日韩乱码人妻无码中文字幕久久| 久久久久黄色| 精品久久久久久久久久久久久| 小说区图片区图片区另类灬| 亚洲黄色片视频| 日本美女一区二区三区视频| 欧美国产日本在线| 欧美中文日韩| 久久久国产午夜精品| 国产精品热视频| 精品无码m3u8在线观看| 欧美中文一区二区| 亚洲国产欧美一区二区丝袜黑人| 亚欧在线免费观看| 国产又色又爽又黄刺激在线视频| 国产视频一区二区在线| 不卡一卡2卡3卡4卡精品在| 最近中文字幕在线观看视频| 99精品视频免费观看视频| 麻豆成人在线看| 九九九视频在线观看| 欧美日韩一区二区三区四区不卡| 3d动漫精品啪啪| 欧美一级裸体视频| 欧美少妇精品| 香蕉加勒比综合久久| 免费观看黄色大片| 欧美成人hd| 国产欧美日韩视频一区二区| 精品久久精品久久| 秋霞av鲁丝片一区二区| 91九色在线porn| 奇米影视一区二区三区| 97在线观看免费| 国产第一页第二页| 午夜精品国产| 欧美乱妇高清无乱码| 潘金莲一级黄色片| 日韩免费高清| 中文字幕欧美日韩va免费视频| 亚洲av无码一区二区三区网址| 在线日韩成人| 精品国产乱子伦一区| 香蕉视频色在线观看| 日韩一区二区三区四区五区| 欧美性色欧美a在线播放| 日本在线观看a| 亚洲欧美小说色综合小说一区| 黄色成人在线播放| 大陆极品少妇内射aaaaa| 国产不卡人人| 久久av资源网| 欧美主播一区二区三区美女| 1024av视频| 日本免费久久| 色88888久久久久久影院按摩| 国产二区视频在线播放| 高清毛片在线观看| 福利一区视频在线观看| 少妇高潮喷水久久久久久久久久| 自拍偷拍欧美视频| 一本大道综合伊人精品热热| 欧美少妇性生活视频| 8av国产精品爽爽ⅴa在线观看| 欧美午夜精品免费| 亚洲天堂网2018| 日韩中文字幕| 亚洲激情视频在线观看| 人妻无码一区二区三区| 精品国产1区| 色偷偷噜噜噜亚洲男人的天堂 | 国产麻豆精品一区二区| 91国产在线免费观看| 免费观看成年人视频| 99在线精品免费| 日本精品一区二区三区视频| 77导航福利在线| 亚洲精选免费视频| 免费在线观看亚洲视频| 成人亚洲综合| 欧美v日韩v国产v| 狠狠人妻久久久久久综合蜜桃| 国产91精品对白在线播放| 最新日韩中文字幕| 久久精品欧美一区二区| 日韩中文欧美在线| 成人激情免费在线| 视频一区二区免费| 欧美激情一区不卡| 一级性生活视频| 成人线上视频| 日韩欧美中文字幕制服| 最新中文字幕视频| 一区二区日韩欧美| 日韩免费观看网站| 午夜精品久久久久久久第一页按摩| 99精品国产视频| 一本一生久久a久久精品综合蜜| 日韩三级免费| 精品婷婷伊人一区三区三| 久久久久国产免费| 日韩在线观看| 51ⅴ精品国产91久久久久久| 国产又粗又猛又色又| 91丝袜美腿高跟国产极品老师 | 国产chinesehd精品露脸| 天堂日韩电影| 欧美国产精品人人做人人爱| 亚洲一级黄色大片| 久久―日本道色综合久久| 麻豆映画在线观看| 成人黄色图片网站| 亚洲精品wwww| 久久久99精品| 紧缚捆绑精品一区二区| 欧美亚州在线观看| 国产高清在线a视频大全| 欧美精品乱码久久久久久| 国产三级视频网站| 亚洲免费高清| 国产精品亚洲不卡a| av毛片在线看| 欧美群妇大交群的观看方式| 久久成人激情视频| 亚洲一区一卡| 精品日韩美女| 国产精选在线| 精品国产伦一区二区三区免费| 免费三级在线观看| 狠狠色伊人亚洲综合成人| 日韩免费三级| 免费观看成人性生生活片 | 中文字幕av亚洲精品一部二部| 国产精品久久二区| 国产精品一二三区视频| 色综合天天综合网天天看片| 亚洲黄色免费在线观看| 尹人成人综合网| 成人免费观看网站| 国产精品蜜臀| 亚洲国产精品免费| aaa人片在线| 91美女蜜桃在线| 日韩人妻精品无码一区二区三区| 麻豆成人入口| 热久久视久久精品18亚洲精品| 午夜成人免费影院| 精品国产91久久久| 国产精品无码午夜福利| 久久不射网站| 亚洲国产精品综合| 韩国精品视频在线观看| 最新69国产成人精品视频免费| 影音先锋国产资源| 亚洲品质自拍视频网站| 精品无码av一区二区三区不卡| 亚洲网站视频| 久久精品日韩精品| 深夜视频一区二区| 在线播放国产精品| 亚洲一区二区影视| 亚洲美女一区二区三区| 中国免费黄色片| 亚洲欧美视频一区二区三区| 日本午夜精品一区二区| 日本午夜免费一区二区| 欧美放荡办公室videos4k| 老司机午夜福利视频| 欧美性猛交99久久久久99按摩| 国产又黄又粗视频| 国产伦精品一区二区三区视频青涩 | 欧州一区二区三区| 国产69精品久久久| 免费a在线观看| 欧美美女激情18p| 国产在线欧美在线| 久久久精品免费网站| 三级av免费观看| 激情综合中文娱乐网| 欧美精品免费观看二区| 亚洲日本中文| 午夜剧场成人观在线视频免费观看| 毛片免费在线播放| 欧美一级艳片视频免费观看| 黄色片免费观看视频| 国产精品高潮呻吟| 国产毛片毛片毛片毛片毛片毛片| 日韩不卡一区二区| 国产一区二区三区小说| 激情五月综合网| 91文字幕巨乱亚洲香蕉| 爱情电影社保片一区| 久久手机免费视频| 青青色在线视频| 日韩一区二区免费电影| aaa在线视频| 亚洲国产日韩av| www.黄色com| 91在线播放网址| 97人人模人人爽人人澡| 视频一区欧美日韩| 人妻少妇精品久久| 亚洲草久电影| 神马影院午夜我不卡影院| 国产伦精品一区二区三区在线播放| 国产精品啪视频| 在线免费看h| 欧美高跟鞋交xxxxxhd| 欧美a免费在线| 亚洲欧美日韩精品久久亚洲区| 亚洲AV无码精品自拍| 欧美欧美欧美欧美首页| 99精品人妻国产毛片| 亚洲成av人**亚洲成av**| 亚洲综合视频网站| 欧美高清在线精品一区| 波多野结衣办公室33分钟| 成人sese在线| 伊人影院在线观看视频| 久久se精品一区二区| 亚洲无吗一区二区三区| 先锋影音国产一区| 缅甸午夜性猛交xxxx| 国产精品草草| 日韩欧美视频免费在线观看| 手机在线电影一区| 亚洲精品国产精品国自产| 色综合综合网| 欧美日韩一区在线观看视频| 欧洲在线一区| 韩国一区二区三区美女美女秀| 亚洲一区 二区| 51精品国产人成在线观看| a一区二区三区亚洲| 国产精品专区h在线观看| 日本在线精品| 国产精品久久999| 国产福利亚洲| 成人国产精品久久久| 免费视频成人| 国产在线一区二区三区| 亚洲视频自拍| 亚洲综合大片69999| 欧美不卡在线观看| 91九色在线免费视频| 日本在线成人| 国产精品裸体一区二区三区| 国产精品zjzjzj在线观看| 国产美女精品久久久| 久久99精品国产自在现线| 精品在线一区| 亚洲三级网页| 日本在线播放不卡| 日韩欧美高清在线播放| 中文精品视频一区二区在线观看| 亚洲a在线视频| 青春草国产视频| 亚洲在线观看| 特级丰满少妇一级| 加勒比av一区二区| 一级黄色片毛片| 久久先锋影音av鲁色资源网| 精品一区二区三区蜜桃在线| 国产精品美女久久久久高潮| 国产精品久久久精品四季影院| 亚洲h在线观看| 久久国产视频一区| 欧美日韩一区二区三区在线| 国产视频www| 亚洲激情视频网| 中文字幕日本在线| 欧美黑人性生活视频| 超级碰碰久久| 成人精品一区二区三区| 国产精品对白| 先锋影音欧美| 激情另类综合| 9l视频白拍9色9l视频| 国产a精品视频| 69精品无码成人久久久久久| 亚洲三级在线观看| 在线观看日本视频| 91精品国产色综合久久| 亚洲欧美日韩动漫| 久久在线观看视频| 一级毛片久久久| 亚洲精品日韩激情在线电影| 亚洲精品亚洲人成在线观看| 福利网在线观看| 小嫩嫩精品导航| 永久看看免费大片| 国产欧美1区2区3区| 国产亚洲精品久久久久久无几年桃| 91久久免费观看| 男人天堂av网| 久久精品中文字幕| 激情开心成人网| 国产精品成人观看视频免费| 精品国产一区二区三区久久久樱花| 青青草综合视频| 免费一级片91| 精品无码在线视频| 一级精品视频在线观看宜春院| 波多野结衣理论片| 亚洲精品久久7777777| av在线导航| 国产欧美日韩最新| 精品在线观看入口| 一二三四视频社区在线| 国产伦理精品不卡| 多男操一女视频| 在线观看成人免费视频| 先锋av资源站| 欧美激情亚洲综合一区| 9999精品视频| 亚洲欧美日韩不卡一区二区三区| 国产日韩1区| 欧美成人精品一区二区综合免费| **欧美大码日韩| 欧美一级黄视频| 亚洲视频第一页| 性欧美18xxxhd| 国内外成人免费视频| 激情自拍一区| 涩视频在线观看| 亚洲一区二区三区国产| 不卡av中文字幕| 欧美成人午夜激情在线| 99视频这里有精品| 在线一区亚洲| 极品少妇一区二区| 日本黄色片免费观看| 在线播放中文一区| 免费网站免费进入在线| 国产精品黄视频| 欧美日韩性在线观看| 欧美一级裸体视频| 国产女人aaa级久久久级| 中文字幕天堂在线| 国产一区二区黄| 久久69成人| 男女激烈动态图| 国产乱码精品一区二区三区五月婷| 久久精品一区二区三区四区五区| 欧美喷潮久久久xxxxx| 成人午夜在线影视| 97se亚洲综合| 伊人影院久久| 波多野结衣一本| 在线观看www91| 亚乱亚乱亚洲乱妇| 91最新国产视频| 欧美三区在线| 欧美xxxxx精品| 色综合天天综合网天天看片| melody高清在线观看| 国产欧美一区二区三区久久| 希岛爱理av一区二区三区| 中文字幕 欧美 日韩| 亚州成人在线电影| 国产中文字幕在线观看| 国产精品一区二区三区久久| 亚欧美无遮挡hd高清在线视频| 亚洲国产欧美日韩在线| 亚洲地区一二三色| 精品资源在线看| 成人黄在线观看| 黑丝一区二区| 97人妻人人揉人人躁人人| 7777精品伊人久久久大香线蕉的| 三级资源在线| 日韩国产精品一区二区| 激情文学综合丁香| 日韩熟女精品一区二区三区| 国产亚洲xxx| 欧美第一在线视频| 久草资源站在线观看| 国产精品短视频| 可以免费观看的毛片| 国产成人亚洲综合91| 亚洲人metart人体| 国产传媒第一页| 7777精品伊人久久久大香线蕉最新版 | 欧美v亚洲v综合v国产v仙踪林| 特级黄色录像片| 91免费观看在线| a毛片在线免费观看|