国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

ASP.NET Core 6 的性能改進

共 14510字,需瀏覽 30分鐘

 ·

2022-05-16 07:43

受到 由Stephen Toub 發(fā)布的關(guān)于 .NET 性能的博客的啟發(fā),我們正在寫一篇類似的文章來強調(diào)ASP.NET Core 在6.0 中所做的性能改進。



基準設置

我們整個過程中大部分的實例使用的是BenchmarkDotNet在此鏈接上提供了repo,其中包括本文中使用的大多數(shù)基準。

BenchmarkDotNet

https://github.com/dotnet/benchmarkdotnet

在此鏈接

https://github.com/BrennanConroy/BlogPost60Bench


本文中的大多數(shù)基準測試結(jié)果都是通過以下命令行生成的:


然后從列表中選擇要運行的特定基準。

這命令行給BenchmarkDotNet指令:

  • 在發(fā)布配置中構(gòu)建所有內(nèi)容。

  • 針對 .NET Framework 4.8 外圍區(qū)域構(gòu)建它。

  • 在 .NET Framework 4.8、.NET Core 3.1、.NET 5 和 .NET 6 上運行每個基準測試。

  • 對于某些基準測試,它們僅在 .NET 6 上運行(例如,如果比較同一版本上的編碼的兩種方式):

dotnet run -c Release -f net6.0 --runtimes net6.0
對于其他人,只運行了版本的一個子集,例如
dotnet run -c Release -f net5.0 --runtimes net5.0 net6.0
我將包括用于運行每個基準測試的命令。


本文中的大多數(shù)結(jié)果都是在Windows上運行上述基準測試生成的,主要是為了將. NET Framework 4.8包含在結(jié)果集中。但是,除非另有說明,一般來說,所有這些基準測試在Linux或macOS上運行時都顯示出相當顯著的改進。只需確保您已經(jīng)安裝了想要測量的每個運行時。這些基準測試使用的是.NET 6 RC1的構(gòu)建,以及最新發(fā)布的.NET 5和.NET Core 3.1下載。

.NET 6 RC1的構(gòu)建

https://github.com/dotnet/installer/blob/main/README.md#installers-and-binaries

最新發(fā)布

https://dotnet.microsoft.com/en-us/download


span< T >

自從在.NET 2.1中增加了Span,之后的每一個版本我們都轉(zhuǎn)換了更多的代碼以在內(nèi)部和作為公共API的一部分使用Span來提高性能。這次發(fā)布也不例外。


PR?dotnet/aspnetcore#28855?在添加兩個 PathString 實例時刪除了來自 string.SubString的 PathString 中的臨時字符串分配,而是使用 Span作為臨時字符串。在下面的基準測試中,我們使用一個短字符串和一個長字符串來顯示避免使用臨時字符串的性能差異。

dotnet run -c Release -f net48 --runtimes net48 net5.0 net6.0 --filter *PathStringBenchmark*
private PathString _first = new PathString("/first/");private PathString _second = new PathString("/second/");private PathString _long = new PathString("/longerpathstringtoshowsubstring/");
[Benchmark]public PathString AddShortString(){ return _first.Add(_second);}
[Benchmark]public PathString AddLongString(){ return _first.Add(_long);}

dotnet/aspnetcore#34001引入了一個新的基于Span的API,用于枚舉查詢字符串,在沒有編碼字符的常見情況下,該查詢字符串是分配空閑的,當查詢字符串包含編碼字符時,分配更低。

dotnet run -c Release -f net6.0 --runtimes net6.0 --filter *QueryEnumerableBenchmark*
#if NET6_0_OR_GREATER public enum QueryEnum { Simple = 1, Encoded, } [ParamsAllValues] public QueryEnum QueryParam { get; set; }
private string SimpleQueryString = "?key1=value1&key2=value2"; private string QueryStringWithEncoding = "?key1=valu%20&key2=value%20"; [Benchmark(Baseline = true)] public void QueryHelper() { var queryString = QueryParam == QueryEnum.Simple ? SimpleQueryString : QueryStringWithEncoding; foreach (var queryParam in QueryHelpers.ParseQuery(queryString)) { _ = queryParam.Key; _ = queryParam.Value; } } [Benchmark] public void QueryEnumerable() { var queryString = QueryParam == QueryEnum.Simple ? SimpleQueryString : QueryStringWithEncoding; foreach (var queryParam in new QueryStringEnumerable(queryString)) { _ = queryParam.DecodeName(); _ = queryParam.DecodeValue(); } }#endif

需要注意的是,天下沒有免費的午餐。在新的QueryStringEnumerable API的情況下,如果您計劃多次枚舉查詢字符串值,它實際上可能比使用 QueryHelpers.ParseQuery 并存儲已解析查詢字符串值的字典更昂貴。


@paulomorgado?的?dotnet/aspnetcore#29448?使用?string.Create?方法,如果您知道字符串的最終大小,則該方法允許在創(chuàng)建字符串后對其進行初始化。這是用來移除UriHelper.BuildAbsolute中的一些臨時字符串分配。

dotnet run -c Release -f netcoreapp3.1 --runtimes netcoreapp3.1 net6.0 --filter *UriHelperBenchmark*
#if NETCOREAPP [Benchmark] public void BuildAbsolute() { _ = UriHelper.BuildAbsolute("https", new HostString("localhost")); }#endif
PR?dotnet/aspnetcore#31267將 ContentDispositionHeaderValue 中的一些解析邏輯轉(zhuǎn)換為使用基于 Span 的 API,以避免在常見情況下出現(xiàn)臨時字符串和臨時 byte[]。
dotnet run -c Release -f net48 --runtimes net48 netcoreapp3.1 net5.0 net6.0 --filter *ContentDispositionBenchmark*[Benchmark]public void ParseContentDispositionHeader(){    var contentDisposition = new ContentDispositionHeaderValue("inline");    contentDisposition.FileName = "File?Name.bat";?}

dotnet/aspnetcore#28855?

https://github.com/dotnet/aspnetcore/pull/28855

dotnet/aspnetcore#34001

https://github.com/dotnet/aspnetcore/pull/34001

天下沒有免費的午餐

https://en.wikipedia.org/wiki/There_ain%27t_no_such_thing_as_a_free_lunch

paulomorgado

https://github.com/paulomorgado

dotnet/aspnetcore#29448

https://github.com/dotnet/aspnetcore/pull/29448

string.Create

https://docs.microsoft.com/en-us/dotnet/api/system.string.create?view=net-6.0



空閑連接

ASP.NET Core 的主要組件之一是托管服務器,它帶來了許多不同的問題需要去優(yōu)化。我們將重點關(guān)注6.0中空閑連接的改進,在其中我們做了許多更改,以減少連接等待數(shù)據(jù)時所使用的內(nèi)存量。


我們進行了三種不同類型的更改,一種是減少連接使用的對象的大小,這包括System.IO.Pipelines、SocketConnections 和 SocketSenders。第二種類型的更改是將常用訪問的對象池化,這樣我們就可以重用舊實例并節(jié)省分配。第三種類型的改變是利用所謂的“零字節(jié)讀取”。在這里,我們嘗試用一個零字節(jié)緩沖區(qū)從連接中讀取數(shù)據(jù),如果有可用的數(shù)據(jù),,讀取將返回沒有數(shù)據(jù),但我們知道現(xiàn)在有可用的數(shù)據(jù),可以提供一個緩沖區(qū)來立即讀取該數(shù)據(jù)。這避免了為將來可能完成的讀取預先分配一個緩沖區(qū),所以在知道數(shù)據(jù)可用之前,我們可以避免大量的分配。


dotnet/runtime#49270將 System.IO.Pipelines 的大小從 ~560 字節(jié)減少到 ~368 字節(jié),減少了34%,每個連接至少有2個管道,所以這是一個巨大的勝利。


dotnet/aspnetcore#31308重構(gòu)了Kestrel的Socket層,以避免一些異步狀態(tài)機,并減少剩余狀態(tài)機的大小,從而為每個連接節(jié)省33%的分配。


dotnet/aspnetcore#30769刪除了每個連接的PipeOptions分配,并將該分配移動到連接工廠,因此我們只分配一個服務器的整個生命周期,并為每個連接重用相同的選項。來自@benaadams?的?dotnet/aspnetcore#31311將 WebSocket 請求中眾所周知的標頭值替換為內(nèi)部字符串,這允許在頭解析過程中分配的字符串被垃圾回收,減少了長期存在的WebSocket連接的內(nèi)存使用。dotnet/aspnetcore#30771重構(gòu)了 Kestrel 中的 Sockets 層,首先避免分配SocketReceiver對象+ SocketAwaitableEventArgs,并將其合并為單個對象,這節(jié)省了幾個字節(jié),并導致每個連接分配的對象較少。該 PR 還匯集了 SocketSender 類,因此您現(xiàn)在平均擁有多個核心 SocketSender,而不是為每個連接創(chuàng)建一個。因此,在下面的基準測試中,當我們有10,000個連接時,在我的機器上只分配了16個連接,而不是10,000個,這節(jié)省了~ 46mb !


另一個類似的大小變化是dotnet/runtime#49123,它增加了對SslStream中零字節(jié)讀取的支持,這樣我們的10,000個空閑連接從SslStream分配的~ 46mb到~2.3 MB。dotnet/runtime#49117在 StreamPipeReader 上添加了對零字節(jié)讀取的支持,然后 Kestrel 在?dotnet/aspnetcore#30863中使用它開始在 SslStream 中使用零字節(jié)讀取。


所有這些變化的最終結(jié)果是大量減少空閑連接的內(nèi)存使用。


下面的數(shù)字不是來自于BenchmarkDotNet應用程序,因為它測量空閑連接,而且更容易用客戶機和服務器應用程序進行設置。


控制臺和 WebApplication 代碼粘貼在以下要點中:

https://gist.github.com/BrennanConroy/02e8459d63305b4acaa0a021686f54c7


下面是10000個空閑的安全WebSocket連接(WSS)在不同框架上占用服務器的內(nèi)存。

這比 net5 減少了近 4 倍的內(nèi)存。

dotnet/runtime#49270

https://github.com/dotnet/runtime/pull/49270

dotnet/aspnetcore#31308

https://github.com/dotnet/aspnetcore/pull/31308

dotnet/aspnetcore#30769

https://github.com/dotnet/aspnetcore/pull/30769

benaadams

https://github.com/benaadams

dotnet/aspnetcore#31311?

https://github.com/dotnet/aspnetcore/pull/31311

內(nèi)部字符串

https://en.wikipedia.org/wiki/String_interning

dotnet/aspnetcore#30771

https://github.com/dotnet/aspnetcore/pull/30771

dotnet/runtime#49123

https://github.com/dotnet/runtime/pull/49123

dotnet/runtime#49117

https://github.com/dotnet/runtime/pull/49117

dotnet/aspnetcore#30863

https://github.com/dotnet/aspnetcore/pull/30863



實體框架核心

EF Core在6.0版本中做了大量的改進,查詢執(zhí)行速度提高了31%,TechEmpower fortune的基準運行時間更新、優(yōu)化基準和EF的改進提高了70%。


這些改進來自于對象池的改進,智能檢查是否啟用了遙測技術(shù),以及添加一個選項,當你知道你的應用程序安全地使用DbContext時,可以選擇退出線程安全檢查。


請參閱發(fā)布實體框架核心6.0預覽版4:性能版的博客文章,其中詳細強調(diào)了許多改進。

TechEmpower fortune

https://www.techempower.com/benchmarks/#section=data-r20

請參閱發(fā)布實體框架核心6.0預覽版4:性能版的博客文章

https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-6-0-preview-4-performance-edition/


Blazor

本機byte[]互操作

Blazor現(xiàn)在在執(zhí)行JavaScript互操作時對字節(jié)數(shù)組有了有效的支持。以前,發(fā)送到和從JavaScript的字節(jié)數(shù)組是Base64編碼的,因此它們可以被序列化為JSON,這增加了傳輸大小和CPU負載。Base64編碼現(xiàn)在已經(jīng)在.NET6中進行了優(yōu)化,允許用戶透明地使用.NET中的byte[]和JavaScript中的Uint8Array。說明如何將此特性用于JavaScript到.NET.NET到JavaScript。


讓我們看一個快速的基準測試,看看byte[]互操作在.NET 5和.NET 6中的區(qū)別。以下Razor代碼創(chuàng)建了一個22 kB的字節(jié)[],并將其發(fā)送給JavaScript的receiveAndReturnBytes函數(shù),該函數(shù)立即返回字節(jié)[]。這種數(shù)據(jù)往返重復了10,000次,時間數(shù)據(jù)被打印到屏幕上。這段代碼對于.NET 5和.NET 6是相同的。


@Message@code { public string Message { get; set; } = "Press button to benchmark"; private async Task RoundtripData() { var bytes = new byte[1024*22]; List<double> timeForInterop = new List<double>(); var testTime = DateTime.Now; for (var i = 0; i < 10_000; i++) { var interopTime = DateTime.Now; var result = await JSRuntime.InvokeAsync<byte[]>("receiveAndReturnBytes", bytes);
timeForInterop.Add(DateTime.Now.Subtract(interopTime).TotalMilliseconds); } Message = $"Round-tripped: {bytes.Length / 1024d} kB 10,000 times and it took on average {timeForInterop.Average():F3}ms, and in total {DateTime.Now.Subtract(testTime).TotalMilliseconds:F1}ms"; }}


接下來我們來看一下receiveAndReturnBytes JavaScript函數(shù)。在.NET 5。我們必須首先將Base64編碼的字節(jié)數(shù)組解碼為Uint8Array,以便它可以在應用程序代碼中使用。然后,在將數(shù)據(jù)返回給服務器之前,我們必須將其重新編碼為Base64。

function receiveAndReturnBytes(bytesReceivedBase64Encoded) {    const bytesReceived = base64ToArrayBuffer(bytesReceivedBase64Encoded);    // Use Uint8Array data in application    const bytesToSendBase64Encoded = base64EncodeByteArray(bytesReceived);    if (bytesReceivedBase64Encoded != bytesToSendBase64Encoded) {        throw new Error("Expected input/output to match.")    }    return bytesToSendBase64Encoded;}// https://stackoverflow.com/a/21797381function base64ToArrayBuffer(base64) {    const binaryString = atob(base64);    const length = binaryString.length;    const result = new Uint8Array(length);    for (let i = 0; i < length; i++) {        result[i] = binaryString.charCodeAt(i);    }    return result;}function base64EncodeByteArray(data) {    const charBytes = new Array(data.length);    for (var i = 0; i < data.length; i++) {        charBytes[i] = String.fromCharCode(data[i]);    }    const dataBase64Encoded = btoa(charBytes.join(''));    return dataBase64Encoded;}


編碼/解碼在客戶機和服務器上都增加了巨大的開銷,同時還需要大量的樣板代碼。那么在.NET 6中如何實現(xiàn)呢? 嗯,它相當簡單:

function receiveAndReturnBytes(bytesReceived) {    // bytesReceived comes as a Uint8Array ready for use    // and can be used by the application or immediately returned.    return bytesReceived;}


因此,編寫它肯定更容易,但它的性能如何呢?分別在.NET 5和.NET 6的blazorserver模板中運行這些代碼片段,在Release配置下,我們看到.NET 6在byte[]互操作方面有78%的性能提升!


請注意,流式互操作支持還可以有效下載(大)文件,有關(guān)更多詳細信息,請參閱文檔。


InputFile 組件已升級為通過 dotnet/aspnetcore#33900 使用流式傳輸。

此外,這個字節(jié)數(shù)組互操作支持在框架中被用來支持JavaScript和.NET之間的雙向流互操作。用戶現(xiàn)在能夠傳輸任意二進制數(shù)據(jù)。有關(guān)從?.NET 流式傳輸?shù)?JavaScript?的文檔可在此處獲得,JavaScript 到 .NET 文檔可在此處獲得。

JavaScript到.NET

https://docs.microsoft.com/dotnet/csharp/language-reference/keywords/using-directive#global-modifier

.NET到JavaScript

https://docs.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-dotnet-from-javascript?view=aspnetcore-6.0#byte-array-support

.NET 流式傳輸?shù)?JavaScript

https://docs.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-javascript-from-dotnet?view=aspnetcore-6.0#stream-from-net-to-javascript

JavaScript 到 .NET 文檔

https://docs.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-dotnet-from-javascript?view=aspnetcore-6.0#stream-from-javascript-to-net



輸入文件

使用上面提到的Blazor Streaming Interop,我們現(xiàn)在支持通過InputFile組件上傳大文件(以前的上傳限制在2GB左右)。由于使用了本地byte[]流,而不是使用Base64編碼,該組件的速度也有了顯著提高。例如,例如,與.NET 5相比,一個100mb文件的上傳速度要快77%。

請注意,流式互操作支持還可以有效下載(大)文件,有關(guān)更多詳細信息,請參閱文檔


InputFile 組件已升級為通過dotnet/aspnetcore#33900使用流式傳輸。

上傳大文件

https://docs.microsoft.com/en-us/aspnet/core/blazor/file-uploads?view=aspnetcore-6.0&pivots=server

文檔

https://docs.microsoft.com/en-us/aspnet/core/blazor/file-downloads?view=aspnetcore-6.0

dotnet/aspnetcore#33900

https://github.com/dotnet/aspnetcore/pull/33900



大雜燴

來自@benaadams?的?dotnet/aspnetcore#30320?對我們的 Typescript 庫進行了現(xiàn)代化改造并對其進行了優(yōu)化,因此網(wǎng)站加載速度更快。signalr.min.js 文件從 36.8 kB 壓縮和 132 kB 未壓縮變?yōu)?16.1 kB 壓縮和 42.2 kB 未壓縮。blazor.server.js 文件壓縮后為 86.7 kB,未壓縮時為 276 kB,壓縮后為 43.9 kB,未壓縮時為 130 kB。


@benaadams?的?dotnet/aspnetcore#31322在從連接功能集合中獲取常用功能時刪除了一些不必要的強制轉(zhuǎn)換。這在訪問集合中的常見特征時提供了約 50% 的改進。不幸的是,在基準測試中看到性能改進是不可能的,因為它需要一堆內(nèi)部類型,所以我將在此處包含來自 PR 的數(shù)字,如果您有興趣運行它們,PR 包括可以運行的基準反對內(nèi)部代碼。


dotnet/aspnetcore#31519?也來自@benaadams,將默認接口方法添加到 IHeaderDictionary 類型,以通過以標頭名稱命名的屬性訪問公共標頭。訪問標題字典時不再輸入錯誤的常見標題!這篇博客文章中更有趣的是,這個改變允許服務器實現(xiàn)返回一個自定義標頭字典,以更優(yōu)化地實現(xiàn)這些新的接口方法。例如,服務器可能會將標頭值直接存儲在一個字段中,并直接返回該字段,而不是在內(nèi)部字典中查詢標頭值,這需要對鍵進行哈希并查找條目。在某些情況下,當獲取或設置標頭值時,此更改可帶來高達480%的改進。再一次,為了正確地對這個變化進行基準測試,以顯示它需要使用內(nèi)部類型進行設置,所以我將包括來自PR的數(shù)字,對于那些有興趣嘗試它的人來說,PR包含在內(nèi)部代碼上運行的基準測試。


dotnet/aspnetcore#31466使用 .NET 6 中引入的新 CancellationTokenSource.TryReset() 方法在連接關(guān)閉但未取消的情況下重用 CancellationTokenSource。下面的數(shù)字是通過運行bombardier對Kestrel的125個連接收集的,它運行了大約10萬個請求。


dotnet/aspnetcore#31528dotnet/aspnetcore#34075分別對重用HTTPS握手和HTTP3流的CancellationTokenSource做了類似的更改。


dotnet/aspnetcore#31660通過在SignalR中為整個流重用分配的StreamItem對象,而不是為每個流項分配一個,提高了服務器對客戶端流的性能。而dotnet/aspnetcore#31661將HubCallerClients對象存儲在SignalR連接上,而不是為每個Hub方法調(diào)用分配它。


@ShreyasJejurkar的?dotnet/aspnetcore#31506重構(gòu)了WebSocket握手的內(nèi)部結(jié)構(gòu),以避免臨時List分配。@gfoidl?中的?dotnet/aspnetcore#32829重構(gòu)QueryCollection以減少分配和向量化一些代碼。@benaadams?的?dotnet/aspnetcore#32234?刪除了 HttpRequestHeaders 枚舉中未使用的字段,該字段通過不再為每個枚舉的標頭分配字段來提高性能。


來自?martincostello?的?dotnet/aspnetcore#31333?將 Http.Sys 轉(zhuǎn)換為使用?LoggerMessage.Define,這是高性能日志記錄 API。這避免了不必要的值類型裝箱、日志格式字符串的解析,并且在某些情況下避免了在日志級別未啟用時分配字符串或?qū)ο蟆?/p>


dotnet/aspnetcore#31784添加了一個新的 IApplicationBuilder。使用重載來注冊中間件,以避免在運行中間件時進行一些不必要的按請求分配。舊代碼如下所示:

app.Use(async (context, next) =>{    await next();});新代碼如下:app.Use(async (context, next) =>{    await next(context);});

下面的基準測試模擬中間件管道,而不需要設置服務器來展示改進。使用int代替HttpContext用于請求,中間件返回一個完成的任務。

dotnet run -c Release -f net6.0 --runtimes net6.0 --filter *UseMiddlewareBenchmark*static private Func, Func> UseOld(Func, Task> middleware){    return next =>    {        return context =>        {            Func simpleNext = () => next(context);            return middleware(context, simpleNext);        };    };}static private Func, Func> UseNew(Func, Task> middleware){    return next => context => middleware(context, next);}Func Middleware = UseOld((c, n) => n())(i => Task.CompletedTask);Func NewMiddleware = UseNew((c, n) => n(c))(i => Task.CompletedTask);[Benchmark(Baseline = true)]public Task Use(){    return Middleware(10);}[Benchmark]public Task UseNew(){    return NewMiddleware(10);}

dotnet/aspnetcore#30320

https://github.com/dotnet/aspnetcore/pull/30320

dotnet/aspnetcore#31322

https://github.com/dotnet/aspnetcore/pull/31322

dotnet/aspnetcore#31519

https://github.com/dotnet/aspnetcore/pull/31519

默認接口方法

https://devblogs.microsoft.com/dotnet/default-implementations-in-interfaces/

dotnet/aspnetcore#31466

https://github.com/dotnet/aspnetcore/pull/31466

bombardier

https://github.com/codesenberg/bombardier

dotnet/aspnetcore#31528

https://github.com/dotnet/aspnetcore/pull/31528

dotnet/aspnetcore#34075

https://github.com/dotnet/aspnetcore/pull/34075

dotnet/aspnetcore#31660

https://github.com/dotnet/aspnetcore/pull/31660

服務器對客戶端流

https://docs.microsoft.com/en-us/aspnet/core/signalr/streaming?view=aspnetcore-5.0#server-to-client-streaming

dotnet/aspnetcore#31661

https://github.com/dotnet/aspnetcore/pull/31661

ShreyasJejurkar

https://github.com/ShreyasJejurkar

dotnet/aspnetcore#32234

https://github.com/dotnet/aspnetcore/pull/32234

martincostello

https://github.com/martincostello

dotnet/aspnetcore#31333

https://github.com/dotnet/aspnetcore/pull/31333

LoggerMessage.Define

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/loggermessage?view=aspnetcore-5.0

dotnet/aspnetcore#31784

https://github.com/dotnet/aspnetcore/pull/31784



總結(jié)

希望您喜歡閱讀 ASP.NET Core 6.0 中的一些改進!我鼓勵你去看看.NET 6博客中關(guān)于運行時性能改進的文章。

https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-6/



瀏覽 37
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 免费AV在线播放| 色噜噜狠狠一区二区三区| 91蝌蚪视频在线观看| 五月网婷婷| 色综合五月婷婷| 无码中文字幕在线观看| 亚洲夜夜操| 91成人视频在线免费观看| 国产一二三四| 午夜精品成人| 中文无码在线观看| 无码久久久| 青青草手机在线观看| 香蕉成人网站| 国产噜噜噜噜噜久久久久久久久 | 一区二区三区四区五区六区高清无吗视频 | 黃色一級片黃色一級片尖叫声-百度-百 | 欧美三级大片| 精品一区国产| 成人网站大香蕉| 国产免费观看av| 色77777| 在线91| 五月丁香六月婷婷综合| 国产久久久久久久久久| 尹人大香蕉网| 北条麻妃在线精品| 久久丁香五月婷婷五月天激情视频 | av天堂中文| 黄色九九| 最新版本日本亚洲色| 苍井空一区二区| 日本少妇网站| 乱伦综合网| 中文字幕超清在线观看| 精品久久免费一区二区三区 | 日韩怡春院| 特级西西人体444www高清 | 久久久人妻无码精品蜜桃| 91超碰在线| 国内操逼| www.五月婷婷| 国产91精品探花一区二区| 在线免费观看网站| 乱伦乱码| 北条麻妃久久久| 黄色a在线| 99精品视频播放| 人妻一区二区三区| 成人视频在线播放| 成人色色网| 天天色天天爱| 欧美人妻日韩精品| 在线三级片视频| 影音先锋av网| 污污污污污www网站免费民国| 日韩城人网站| 亚洲精品一区二区三区| 日韩操操| 精品久久久久久久久久久| 成年人在线观看视频网站| 又黄又爽的视频| 国产无码影视| 69AV免费视频| 人妖无码| 91在线成人视频| 亚洲天堂2014| 婷婷色色婷婷五月天| 五月婷婷婷| 黄色影片在线观看| 狼友精品| 国产黄色免费视频| 香蕉视频成人在线| 免费性爱网站| 国产精品久免费的黄网站| 免费A级| 欧美日韩精品一区二区三区| 乌克兰xxxx| 亚洲va| 91av视频在线| 欧美一级A片免费看| 家庭乱伦av| 影音先锋麻豆| 天天日天天操天天摸天天干天日射天天插 | 人妻丰满熟妇| 午夜成人小视频| 亚洲日韩视频| 日韩黄色毛片| 在线成人网站| 欧美日韩操| 中文字幕第六页| 欧美熟妇精品一级A片视色| 色欲av伊人久久大香线蕉影院| 中文字幕一区在线| 色婷婷一区二区三区久久午夜| 欧美一级在线免费观看| 日韩黄色免费电影| 婷婷精品国产一区二区三区日韩| 成年人在线播放| 欧洲一区在线观看| 无码AV网| 色噜噜一区二区三区| 国产AV无码精品| 美女做爱视频网站| 亚洲成人不卡| 99黄网| 人人看人人澡| 蜜桃91在线观看| 一本之道高清数码大全| 欧美午夜影院| 大肉大捧一进一出免费阅读| 久福利| 亚洲免费观看在线观看| 动漫人物插画动漫人物的视频软件 | 婷婷V亚洲V丁香月天V日韩V | 一个色综合网| 午夜黄色电影| 18禁在线| 免费一级a片| 国产TS丝袜人妖系列视频| 性爱视频网站| 中文字幕在线免费视频| 亚洲黄色成人网站| 高清无码在线免费观看| 99久久精品国产毛片| 午夜乱伦| 午夜精品18码视频国产17c| 91亚洲精品久久久久蜜桃| 少妇被躁到高潮无码| 五月婷婷俺來也| 国精品无码人妻一区二区三区免费| 欧美亚洲色色网视频| 手机看片久草| 日韩精品久| 在线操B视频| 俩小伙3p老熟女露脸| 97资源视频| 手机看片1024久久| 西西人体444www| 黄色综合网站| 免费视频99| 手机av网站| 一级大香蕉| 亚洲www视频| 少妇人妻av| xxxxxbbbbb| 久操青青| 亚洲视频黄色| 亚洲精品熟女| 青青艹在线视频| 91做爱| 色播综合| 久久肏| 久久中文字幕免费| 欧美性猛交XXXX乱大交| 高清无码视频免费在线观看| 亚洲网站免费观看| 欧美aaa视频| 日韩av免费看| 日韩亚洲在线| h网站在线| 久久黄色网址| 天天操天天拍| 天天天天干| 久久91av| 成人性生交片无码免费看人| 日日骚亚洲| 在线观看欧美黄片| 黄色视频毛片一一| 欧美日韩国产激情| 一本无码中文字幕| 97AV人妻无码视频二区| 伊人九九热| 天天射天天爽| 91探花足浴店少妇在线| 天天日天天日天天操| 91欧美精品成人综合在线观看 | 男人的天堂视频在线观看| 久久久精品在线| 午夜免费无码视频| 久操免费在线观看| 国产三级视频在线| 一级一A片一a免费看| 中文字幕精品在线观看| 天天撸视频| 中文字幕欧美日韩| 人人操人人看人人摸| 国产1024在线| 中文字幕无码影院| 国产嫩苞又嫩又紧AV在线| 色天堂污| 69AV视频在线观看| 天堂成人网| 一级无码毛片| 俺去俺来也www色视频| 无码一道本| 91在线精品秘一区二区黄瓜| 韩国中文字幕HD久久精品| 国产小毛片| 久久99精品国产.久久久久久| 男人资源网| 黄片视频免费播放| a视频免费| 久久理伦| 成人片天天看片欧美一级| A∨无码免费| 国产精品免费久久影院| 亚洲AV秘无码一区在线| 91视频入口| jizz日韩| 人妻天堂| 8050午夜网| 天天日毛片| 免费成人AV| 超碰在线99| 强伦轩人妻一区二区三区70后| 欧美A一| 亚洲日皮| 乱伦综合网| 五月天福利视频| 麻豆av人人乐| 国产成人97精品免费看片| 91视频免费| 黄色视频毛片| www亚洲视频| 久久不卡视频| 亚洲欧美国产精品专区久久| 国产成人网| 伊人婷婷色香综合| 一区二区av在线| 国产精品高清无码| 午夜性福利视频| 欧美A黄片| 中文字幕+乱码+中文乱码电影| 熟女中文字幕| 成人视频观看| 久久青青草在线视频| 欧美性爱成人| 手机成人在线视频| 午夜性爱AV| 大香蕉三级片| 91丨九色丨熟女老版| 欧美一级a视频免费放| 群交无码| 欧美三P囗交做爰XXXⅩ| 青操av| 91日韩高清| 在线免费观看亚洲| 欧美高潮喷水| 特级西西44www无码| 色色色99| 91精品人妻| 91精品国产亚洲| 国产精品久久久久久无码人妻| 亚洲国产精品久久| 吴梦梦md0069| 美女A级毛片| 成人无码区免费| www.黄色片| 亚洲综合免费观看高清| 久操综合视频在线| 国产七区| 午夜福利10000| 色77777| 国产欧美高清在线| 日日射视频| 欧美日韩色| 国产久久这里只有精品视频| 五月天激情网站| 91无码视频在线观看| 午夜ww| 91好爽| 在线成人网站| 中文字幕在线无码观看| 免费A片在线播放| 囯产精品宾馆在线精品酒店| 啪啪人妻| 午夜福利播放| 少妇av| 特级西西444WWW视频| 午夜性爱福利| 国产欧美另类| 大香蕉伊人网站| 18禁网址| 蝌蚪窝在线视频免费观看| 青青草在线播放| 五月婷婷欧美| AV在线大香蕉| 无码探花| 亚洲精品色| 波多野结衣一区二区三区| 一起操在线视频| 中文资源在线观看| 免费乱伦视频| 美女视频一区二区三区| 蜜桃亚洲AV无码一区二区三区| 欧美日韩在线免费| 91av天堂| 怡春院久久| 四川少妇搡BBBB搡BBB视频网| 国产精品视频免费| 无码国产传媒精品一区| 中文字幕在线视频第一页| 成年人观看视频| 激情网婷婷| 欧美午夜无码| 一本道无码在线| 嘿咻无码| 波多野结衣一级| 天天色天天干天天日| 国产精品乱伦| 亚洲va欧美va| 欧美在线免费观看| 成人免费毛片视频| www.日韩AV| 一级欧美| 久久久无码人妻精品无码| av777777| 99操| 免费在线观看A| 国产精品久久久久久久久久久免费看| 久久99久久99久久99国内少妇精品| 曰本精品综合网在线| 久久夜色精品国产噜噜亚洲AV| 五月天婷婷视频| 久热网站| 国产欧美精品一区二区色综合| 日韩在线一级片| 亚洲AV无码精品久久一区二区| 成年人观看视频| 欧洲在线观看| 天堂国产| 久久久久国产一区二区三区| 国产精品扒开腿| 亚洲爆乳无码一区二区三区| 国产a区| 午夜日韩乱伦| jzzijzzij亚洲成熟少妇在线播放 黑人猛躁白人BBBBBBBBB | 一卡二卡在线视频| 欧美v日韩| 精品国产一二三| 国产无码中文| 人妻免费视频| 色天堂色天使| 五月天婷婷激情视频| 亚洲AV无码专区一级婬片毛片| 91精品人妻一区二区三区四区 | 欧一美一婬一伦一区?| 四虎性爱视频| 91蜜桃视频| 亚洲欧洲高清无码| 韩日中文字幕| 东京热视频网站| 国产又爽又黄A片| 插吧插吧网| 日韩欧美高清在线| 久草免费在线视频| 国产美女在线观看| 中文无码一区| 91久久久久久久91| 一区视频在线| 婷婷五月天在线电影| 91在线成人| 亚洲精品大片| 亚洲vs天堂vs成人vs无码| 天天躁夜夜躁av| 日本免费一区二区三区| 日欧内射| 亚洲黄色成人网站| 久久8| 欧美精品久久久久久久多人混战| 五月天黄色片| 中文字幕成人电影| 亚洲天堂中文| 免费AV毛片| 国产日韩欧美在线| 蜜桃成人无码区免费视频网站| 99热这里只有精品9| 无码一区二区黑人猛烈视频网站| 再深点灬好爽灬轻点久久国产| 国产嫩草久久久一二三久久免费观看| 人人妻人人玩人人澡人人爽| 小草久久95| 安微妇搡BBBB搡BBBB| 成人国产欧美日韩在线视频| 北条麻妃在线一区| 国产一级a毛一级做a爱| 亚洲第一成网站| 亚洲aa| 亚洲日日夜夜| h片免费在线观看| 美女被操面费网站| 江苏妇搡BBBB搡BBBB小说| 免费人成视频在线播放| 欧美精产国品一二三| 亚洲日韩精品在线视频| 人妻操逼| 午夜无码鲁丝片午夜精品| 超碰成人在线免费观看| 亚洲777| 亚洲精品成人无码AV在线| 性视频人人| 日韩a片在线观看| 微拍福利一区二区| 免费色网站| 欧美性大香蕉| 日本欧美视频| 国产成人午夜视频| av中文在线观看| 97人妻人人操| 人妻体内射精一区二区三区 | 竹菊影视一区二区三区| 69AV无码| 人妻少妇精品视频一区二区三区 | 久久丁香五月婷婷五月天激情视频 | 无码中文字幕| 亚洲天堂2016| 污污污www精品国产网站| 动漫一区二区三区| 国产亲子乱A片免费视频| 俄罗斯白嫩BBwBBwBBw91| 久久久久久国产免费A片| 99热这里只有精品7| av黄色| 无码AV免费观看| 激情小视频在线| av中文字幕网| 亚洲国产成人无码a在线播放| 好男人WWW一区二区三区| 精品孕妇一级A片免费看| 国产高清免费| 五月天色婷婷丁香| 久久人妻熟女中文字幕av蜜芽| 艹逼网站| 一级黄色视频日逼片| 亚洲天码中字| 午夜性爱福利视频| 日韩无码中文字幕| 人人弄人人| 激情小说五月天| AA黄色电影| 亚洲AV无码免费| 免费的黄色视频在线观看| 中文字幕在线观看一区| 91国语又粗又大对白| 超碰91免费在线观看| 久久成人片| 日本a在线免费观看| 国产A级毛片| 日韩欧美国产成人| 人人摸人人摸人人| 国产成人一级片| 1024手机在线视频| 亚洲成人视频网站| 色欲影音| 无码一级片| 四虎成人免费视频| 综合激情av| 欧美精品久久久久久| 大香蕉在线75| 免费的黄色片| 无码网| 国产视频1区| 51午夜福利| 日本不卡一区二区| 国产第五页| 99在线精品视频免费观看软件| 日韩无码电影| 欧美日本成人网站入口| 免费看一级A片| 爱就色色网| 中文字幕一区二区蜜桃| 五月丁香天堂网| 亚洲国产精品18久久久久久| 色男人色天堂| 国产精品视频无码| 91国产精品在线视频| 国产精品一线| 久草电影网站| 国产精品资源| 一级A黄片| 综合精品7799| 免费V片在线观看| 国产色哟哟| 91久久无码一区人妻A片蜜桃| 免费看欧美日黄片| 91欧美视频| 大香蕉在线啪啪| 一级片黄色免费| 免费在线黄色电影| 小小拗女BBw搡BBBB搡| 国产一级a毛一级a毛视频在线网站| 亚洲无码视频在线免费观看| 日韩性AV| 最近中文字幕免费| 亚洲人成色777777无码| 日韩欧美91| 麻豆免费版在线观看| 五月婷婷丁香综合| 欧美成人视频网| 吴梦梦一区二区三区| 久久综合电影| 九九精品99| 吴梦梦md0069| 爱操逼网| 成人免费网站在线观看| 老太奶性BBwBBw侧所| 久久精品免费观看| 色图15p| 三级片日本在线| www欧美| 欧美操BB| 无码人妻一区二区三一区免费n狂飙| 日韩视频播放在线综合| 欧美日韩精品久久久免费观看| 少妇激情av| 欧美足交视频| 九九热毛片在线观看| 人人爽人人做| 成人做爰100片免费-百度| 国产一二三视频| 中文字幕在线中文| 黄色一级电影网| 懂色成人av影院| 2021无码| 美女福利在线| 亚洲无码中文视频| 精品一区二区三区三区| 国内精品卡一卡二卡三| 欧美成人一级片| 艹逼逼视频| 亚洲色欧美| 色噜噜人妻av中文字幕| 大地资源第三页在线观看免费播放最新| 天天干天天操天天| 亚洲无码一本道| 日韩免费黄色视频| 亚洲欧美在线成人| 熟女人妻一区二区三区| seseav| 六月丁香婷| 骚逼日本| 日韩高清精品在线| 亚洲成人无码在线| 欧美午夜网站| 手机在线毛片| 很很撸| 伊人综合视频| 国产A级毛片久久久久久| 伊人蕉| 国产精品久久久久久久久| 亚洲黄色免费在线观看| 男女做爱网站| 天天狠狠操| 国产精品偷拍视频| 青草伊人av| 夜夜操夜夜爽| 日韩1区| 国产精品一色哟哟哟| 亚洲色激情| 69国产精品| 久久99国产乱子伦...| 息子交尾一区二区三区| 日本色情网| 国产又粗又大又爽91嫩草| 91黄色电影| 大香蕉伊人综合在线| 女人的天堂网| 北条麻妃一区二区三区-免费免费高清观看| 亚洲精品免费视频| 操比片| 人人插人人爽| 亚洲男人的天堂av| 午夜视频网| 黄色一级电影| 国产婷婷色一区二区三区| 在线操B| 婷婷成人在线| 亚洲人操逼| 蜜桃91精品秘入口| 久久精品三级片| 北岛玲在线视频| 欧美日韩大片| 又黄又色的视频| 天天射中文| AV无码资源| 性无码一区二区三区| 六月天婷婷| 一本色道久久综合| 天天色图片| 无码日逼| 亚洲色图在线视频| 国产视频二区| 操逼com| 无码免费毛片一区二区三区古代 | 中国操逼网| 特级毛片WWW| 天天看片天天爽| 亚洲午夜久久久久久久久| 91乱伦| 四虎在线观看| 99这里只有精品视频| 日日射天天干| 日韩AⅤ无码一区二区三区| 欧美aa片| 特级特黄AAAAAAAA片| AV中文在线观看| 看黄片com| 色天天干| 18啪啪网站| 成人精品一区日本无码网站suv/ | 午夜福利视频网站| 99免费小视频| 亚洲成人AV| 国内精品人妻无码久久久影院蜜桃 | 成人午夜精品无码区| 97精品久久| 国产激情综合在线| 亚洲视频99| 色色色999| 国产人妻一区二区三区欧美毛片| 日韩精品在线观看视频| 大香蕉操| 色综合中文字幕| 波多野结衣高清视频| 国产麻豆一区二区三区| 少妇高潮日韩| 高清无码小视频| 无码人妻丰满熟妇区17水蜜桃 | 亚洲欧美在线综合| 另类老妇性BBwBBw| 天天操夜夜爽| 超碰免费在线观看| 在线看黄网站| 7777AV| av在线观看中文字幕| 精品黄色片| 欧美日韩大片| 2025AV在线| 俄罗斯白嫩BBwBBwBBw91| 麻豆精品秘国产| 人人看,人人摸| www.av免费| 午夜成人福利视频在线观看| 亚洲免费观看高清完整版在va线观 | 国产精品96久久久| 欧美一级黃色A片免费看小优视频| 狠狠操狠狠操狠狠操| 俺去草| 亚洲国产毛片| 国产色网站| 欧美一级在线免费观看| 热久久在线观看| 久热思思| 福利导航视频| 久久大香蕉91| 肏屄在线观看| 免费在线观看内射| 秘蜜桃色一区二区三区在线观看| 日本a在线| 狼友视频在线观看18| 久久h| 久久精品在线视频| 精品黑人| 国产精品99久久久久久成人| 中文字幕在线视频免费观看| 亚洲春色一区二区三区| 自拍视频在线观看| 激情五月在线| 亚洲AV无码乱码国产精品蜜芽 | 熟女少妇视频| 亚洲v区| 黑人猛躁白人BBBBBBBBB | 2016超碰| 男人天堂中文字幕| 成人小视频十八禁免费观看| 日韩欧美综合一区| 高清无码免费在线视频| 亚洲国产精品成人网站| 五月婷婷黄色| 中文字幕精品综合| 九九色播| 亚洲无码在线资源| 18性XXXXX性猛交| 极品小仙女69| 国产一级操逼| 亚洲无吗在线视频| 国产精品系列视频| 超碰91免费在线观看| 91精品国产综合久久久蜜臀粉嫩| 日韩免费性爱视频| 午夜福利高清在线观看| 成人精品视频| 中文字幕你懂的在线三级| 免费看AV大片| 就去色色五月天| 国产高清AV无码| 青青日逼| 青娱乐国产精品一区二区| 国产又粗又大又爽| 国产精品一级a毛视频| av六月天| 国产成人亚洲综合AV婷婷| 午夜成人福利剧场| 中文字幕无码日韩| 亚洲国产婷婷香蕉A片| 91天堂网| 操逼视频免费在线观看| 青青欧美| 欧美熟妇一区二区三区| 另类欧美色图| 欧美在线v| 五月婷中文字幕| 91AV在线看| 91人人澡人人爽人人看| www黄片| 亚洲草片| 大香蕉伊人成人| 日韩三级视频在线观看| 在线国产激情视频| 中文字幕在线乱| 国产毛片777777| 成人福利在线观看| 激情五月天视频| www.久久久久| 亚洲成人性爱网| 大鸡巴操骚逼视频| 丁香婷婷五月色成人网站| 久久久久久久久国产| 国产靠逼| 日韩av在线免费观看| 兔子先生和優奈玩游戲脫衣服,運氣報表優奈輸到脫精光 | 成人aaa| 91爱爱com| 性欧美XXXX| 无码三级午夜久久人妻| 欧美69影院| 国产丝袜在线| 日韩高清无码专区| 中文字幕在线亚洲| 亚洲无码免费看| 美日韩三级| 国产1024在线| 97视频网站| 老女人网站| 国产又爽又黄免费观看| 免费无码婬片AAAA片在线蜜芽| 天堂色综合| 久久99久久99| 男女69视频| 成人在线一区二区| 99re在线| 91麻豆天美传媒在线| 日日爱av| 国产中文字幕波多| 豆花av在线| 成人A片免费看| www.俺去也| 久久黄网| 日韩欧美综合| 日韩欧美国产黄色电影| 91探花秘入囗| 欧美精产国品一二三区别| 黄色视频免费播放| 波多野结衣av中文字幕| jizz麻豆| 亚洲精品一区二区三区在线观看| 一夲道无码专区av无码A片| 色色色色色欧美网| 在线看毛片网站| 久色亚洲| 91农村站街老熟女露脸| 黄色AV天堂| 亚洲777| www.伊人网| 欧美日韩视频一区二区| 日韩精品丰满无码一级A片∴| 搡女人视频国产一级午夜片| 99视频精品在线| 精品一二三区| 欧美熟女一区二区| 欧美日韩成人网站| 国产99自拍| 骚逼操| www黄片| 亚洲精品国产精品国自产观看| av中文字幕在线播放| 国产区在线观看| 香蕉大综合| 国产理论在线| 国产剧情91| 足浴店少妇69XXX| 青青草原av| 人妻无码在线观看| wwwwww黄| 亚洲视频免费在线播放| 影音先锋亚洲资源| 成人影视亚洲| av电影在线免费观看| 韩国三级HD久久精品| 国内精品久久久久| 爱爱动态图| 日韩美女免费性爱视频| 高清无码视频在线| 人妻天天爽夜夜爽| 欧美成人午夜| 欧美日韩一区在线| 无码AV网站| 天天干强奸视频在线综合| 91丨精品丨国产丨丝袜| 182av| 一级成人A片| 日韩A级片| 国产精品一级无码免费播放| 热热热热色| 影音先锋AV资源在线| www.俺去了| 亚洲福利片| 日本一区二区网站| 人妻无码人妻| 一区二区三区四区视频在线| 唐山熟女工棚嗷嗷叫| 成人h网站在线观看| 亚洲成人在线免费| 大地影院资源官网| 国产偷拍| 欧美一级片免费看| 天天天天操| 国产色视频在线| 亚洲欧美视频| 免费毛片网站| 三级不卡视频| 性福利导航| 男人天堂手机在线| 欧美天堂在线| 亚欧洲精品视频| 色婷婷久久综合| 大香蕉伊人在线观看视频| 一区二区三区四区在线| 国产精品2| 大香蕉三级| 91在线无码精品秘入口| 激情av在线观看| 国产成人无码一区二区在线播放| 精品在线第一页| 国产A√| 欧美午夜乱伦电影| 免费的黄色视频网站| 日本老熟妇| 天天天天天天干| 五月婷婷色色网| 在线亚洲色图| 激情网五月天| 午夜aaa| 亚洲无码电影视频| 黄色一级片免费| 欧美日韩高清无码| 中文视频免费播放| P站免费版-永久免费的福利视频平台| 国模一区二区| 99性爱视频| 国产精品v欧美精品v日韩精品 | 亚洲国产成人va| 91欧美亚洲| 被黑人猛躁10次高潮视频| 91人妻人人澡人人精品| 婷婷六区| 日韩逼逼| 天美精东蜜桃91| 男人天堂网站| 黑人无码AV| 亚洲天堂AV网| 黄网站免费观看| 91精品国产91久久久久久吃药| 久久久人妻熟妇精品无码蜜桃 | 大鷄巴成人A片| 蝌蚪窝在线观看| 夜夜网站| 久久久青草| 豆花成人社区,视频| 欧美精品欧美精品系列| 你懂的国产| 日日干日日操| 国产3p绿帽骚妻视频| 亚人精品中文字幕在线观看| 日韩城人网站| 精品久热| 日韩精品中文字幕无码| 伊人成人视频在线观看| 大香蕉尹人在看| 国产福利精品视频| 欧美精品在线免费| 污视频网站在线观看| 四虎精品影院| 五月天视频网| 婷婷亚洲天堂| 五月天黄色视频| 影音先锋AV资源在线| 成人特级毛片全部免费播放| 91av|