日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在上司面前硬不起来?教你如何快速将字符串转换为可执行代码

發布時間:2023/12/4 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在上司面前硬不起来?教你如何快速将字符串转换为可执行代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

???老是因為活不好被上司欺凌?

? ? 在上司面前很沒面子

? ? 在上司面前硬不起來??

? ??是時候分享一個可以快速將字符串轉換為可執行代碼的項目給你了 -?YACEP?!

? ? 不過,這不是一篇專門對YACEP?做詳細介紹的隨筆,想知道更詳細的的YACEP?細節,請去GitHub上觀摩。?//這特么都啥離奇思路???

? ? 這篇隨筆的核心是介紹一下YACEP所用到的一些技術工具,服務和技巧,鑒于篇幅原因,不可能面面俱到,只能點到為止,目錄如下:


?? ?

? ? 目錄:

? ? ? ? ? ??1.?YACEP簡介

? ? ? ? ? ? 2.?技術篇

? ? ? ? ? ? ? ?2.1?利用優先爬山算法解決運算符優先級的問題

? ? ? ? ? ? ? ?2.2?利用ReadOnlySpan加速字符串解析

? ? ? ? ? ? ? ?2.3?利用表達式樹和Emit生成表達式執行代理

? ? ? ? ? ? ? ?3.?工具篇(上)

? ? ? ? ? ? ? ? 3.1?測試覆蓋率工具 - Coverlet?

? ? ? ? ? ? ? ? 3.2?覆蓋率報表轉換工具 -?ReportGenerator?

? ? ? ? ? ? ? ? 3.3?基準測試工具 - BenchmarkDotNet

? ? ? ? ? ?4.?服務篇(下)

? ? ? ? ? ? ? ? 4.1??測試覆蓋率服務 -?Codecov

? ? ? ? ? ? ? ? 4.2?代碼質量分析服務 -?SonarCloud

? ? ? ? ? ? ? ? 4.3 持續集成服務1 -?Travis CI

? ? ? ? ? ? ? ??4.4 持續集成服務2 -?AppVeyor

? ? ? ? ? ? ? ? 4.5?持續集成服務3 -?Azure DevOps

? ? ? ? ? ?5. 技巧篇(下)

? ? ? ? ? ? ? ?5.1 利用props文件抽離csproj的公共配置

? ? ? ? ? ? ? ?5.2 利用WSL跨平臺測試代碼

? ? ? ? ? ? ? ?5.3 利用持續集成服務檢查PR

? ? ? ? ? ? ? ?5.4 更易寫的文檔格式 - AsciiDoc

? ? ? ? ? ? ? ?5.5 如何給你的項目添加更多的徽章

? ? ? ? ? ? ? ?5.6 利用git?message自動發布NuGet包

?


1.?YACEP??簡介

? ? ?YACEP?: yet another csharp expression parser,是一款基于netstandard2.0構建的輕量級高性能表達式解析器。能夠將一段有效的字符串并轉換成一棵抽象語法樹,同時可以把抽象語法樹轉換成一段可以執行的代碼。

? ? ? 項目使用MIT開源協議,代碼托管在GitHub上,更多更詳細的信息可以去看官方文檔,隨便給個star什么的就再好不過了:)

? ? ??YACEP??的核心是一個輕量級的表達式解析器,其解析代碼不到500行,算上輔助的一些操作,整個解析器代碼不到600行。解析器內部使用了??ReadOnlySpan?來處理字符串,所以在做長串處理時,內存消耗可以做到很低,處理起來也非常快。

? ? ?YACEP??還附加實現了一個簡單編譯器,可以將抽象語法樹轉換成可執行代碼。編譯器的接口申明了兩個方法,一個不帶泛型參數,一個帶了泛型參數。所以在?YACEP??的內部編譯器的實現有兩個,第一個是不做運行時類型綁定的實現,一個是限定運行時類型綁定的實現。前者有更好的靈活性,有類似Python這種語言的動態能力,所以無法在編譯完成時生成更優化的IL指令,性能一般。而后者是在編譯時就已經限定了具體的類型,所以能夠生成更短的IL指令,性能相對于第一種有非常大的提升。

1 ?public interface ICompiler

2 {
3 ///不做運行時類型綁定
4 IEvaluator Compile(EvaluableExpression expression);
5 ///做運行時類型綁定
6 IEvaluator<TState> Compile<TState>(EvaluableExpression expression);
7 }

? ? ??YACEP??具體的其它特性可以去?GitHub?上查看,這里就直接從官方復制過來,如下:

  • 開箱即用,內置了的字面值, 一元及二元操作符以及統計類與時間類函數可滿足大部分使用場景

  • 跨平臺,基于netstandard2.0標準構建

  • 輕量級,只有500多行代碼實現的輕量級詞法分析器

  • 低消耗,詞法分析器使用?ReadOnlySpan?解析字符串

  • 高性能,使用EMIT技術生成IL來構建可執行對象(查看基準測試報告)

  • 支持條件表達式

  • 支持索引器

  • 支持 in 表達式

  • 支持自定義字面量

  • 支持自定義一元操作符

  • 支持自定義二元操作符

  • 支持自定義函數

?


2.技術篇

2.1?利用優先爬山算法解決運算符優先級的問題

是一種深度優先的算法,它采用啟發式的方式進行局部擇優。現在的很多人工智能技術也有用到此算法。(后簡稱爬山算法)

? ? ? ? ? 更詳細的介紹請點擊此鏈接:https://en.wikibooks.org/wiki/Algorithms/Hill_Climbing

? ? ? ? ? 當前有很多種算法可以解決運算符優先級的問題,比如調度場算法,遞歸下降算法,移進歸約算法等。

? ? ? ? ? 那為什么YACEP?會選用優先爬山算法呢?

? ? ? ? ? 因為爬山算法是我看過眾多的算法中,理解起來是最快的。下面講解一下這個算法的大致思路。

? ? ? ? ? 在開始之前我需要先回憶一下小學學到的數學知識,四則運算法則和結合律。

? ? ? ? ? 四則運算法則告訴我們當一個式子有加減乘除的時候,先算乘除后算加減,這個是一個原則,很好理解,照著做就成。

? ? ? ? ??結合律就稍復雜一點了,結合律是說在一個包含有二個以上的可結合運算子的表示式,只要算子的位置沒有改變,其運算的順序就不會對運算出來的值有影響。看不懂是吧,換一種說法就是:

( a + b ) + c = a + ( b + c )? ?

? ? ? ?a, b的和 再與c求和的值 一定 等于 a與? b, c的和? 求和的值。請務必按照這個斷句讀,否則有點拗口。

? ? ? ?如果讀完還不知道啥意思,可以回小學去捶一頓你們的體育老師了。

? ? ? ?好了,有了上面的知識儲備,我們開始研究如下數學表達式:

a + b * c * e + d

? ? ? ? ? ??按照四則運算法則: 先乘除后加減,對于上述表達式,我們標記一下運算的優先級

? ? ? ? ?再按照結合律,對于更高優先級的乘法,在求 a*b*c 的值的時候,我們無所謂先算 a*b 再用這個結果去乘c,還是先算b*c再去乘a。按照當前主流的文字閱讀規則,我們選擇從左往右,即先算b*c,然后拿到這個結果再乘d。我們將b*c的結果存儲為m,于是上述表達式可以簡化為:

// m = b * c
a + m * d + e

? ? ? ?再繼續,我們將m*d的結果存儲為n,于是上述表達式再次簡化為:

// m = b * c
// n = m * d
a + n + e

? ? ? ? ?再次按照結合律,我們將a+n的結果存儲為x,?于是上述表達式還可簡化為:

// m = b * c
// n = m * d
// x = a + n
x + e

? ? ? ??到這一步只要求x+e的結果就好了,把前面的步驟合并在一起。


a + b * c * d + e
-----
m
---------
n
---------------
x
----------------------


? ? ? 去掉字符,我們把下面的虛線連接起來,大概是這樣:

? ? ? 山頂

/ ----- \
/ \
/ --------- \
/ \
/ ------------- \
/ \
/ ----------------- \

? ? ??這就是傳說中的爬山算法!!!

? ? ?是不是超好懂!!!

? ? ?10秒鐘讀懂了爬山算法!!!? ? ?

? ? ? 其實怎么說呢,理解到這一步基本就離理解完整的爬山算法差的沒幾百步了。總共也就幾百步,你再走幾百步就完全理解了,加油,我們繼續。

? ? ? 按照上述的步驟,我們現在開始理解算法的流程。我們將表達式中的元素分為兩類,一類我們叫原子值,比如上面表達式中的a、b、c、d、e,另一類我們叫他們為運算符,比如+和*。對于帶括號的表達式,我們可以稱其為子表達式,也是一種表達式,所以我們總是可以將任何一個表達式拆解為只包含原子值或運算符的表達式(對于一個不包含運算符的表達式,直接拿值就完了)。

? ? ? 基于上述的分類,我們開始描述一下爬山算法的運算步驟:

? ? ? ? ? ? ? ?1. 讀取當前一個原子值和它最鄰近的運算符

? ? ? ? ? ? ? ?2.?讀取下一個原子值和它最鄰近的運算符

? ? ? ? ? ? ? ?3. 如果步驟1中的運算符的優先級大于步驟2中的優先級,則算法返回當前原子值,當前原子值最鄰近運算符與下一個原子值的子表達式

? ? ? ? ? ? ? ?4. 否則,從步驟2開始構建新的子表達式繼續按照上述步驟處理

? ? ? 回到表達式:

a + b * c * d + e

? ? ? 現在按照爬山算法開始處理這個表達式:

  • ?讀到原子值a以及優先級為1的運算符+,?a +?

  • ?讀取下一個原子值b以及優先級為2的運算符*,?b *?

  • ?優先級2大于1,所以我們開始從b開始構建子表達式?

  • ?讀取下一個原子值c以及優先級為2的運算符*,?c *?

  • ?當前的子表達式的??b *?優先級是2(,新讀到???c *?的優先級也是2,得到新表達式?b * c *?, 優先級是2。上面的步驟的值??m *?

  • ?讀取下一個表達式??d +?, +的優先級是1,所以整個子表達式返回值為??m * d?,這兩步需要理解結合律。上面的值??n +??

  • ?子表達式已經處理完成,退出子表達式的處理流程,當前的表達式為的優先級為步驟1中,?a +

  • ?下一個表達式為?n +??,兩者的優先級都是1,返回子串??a + n?上面的值?x +?

  • ?下一個表達式為??e??,直接返回

  • ?得到最終表達式??x + e?

  • ? ? ? ?回到之前我們得到的那座山,再看看這個步驟,你會發現這個流程還真的就是在爬這座山 。

    ? ? ? 山頂

    / ----- \
    / \
    / --------- \
    / \
    / ------------- \
    / \
    / ----------------- \

    2.2?利用ReadOnlySpan加速字符串解析

    ? ? ? ? ?C#中String對象是一個只讀對象,一旦創建將不可更改。所以C#中對String對象做更改的方法底層都會創建一個新的String對象。比如在如下代碼中:

    1 unsafe
    2 {
    3 var random = new Random();
    4 var str = "";
    5 for (int i = 0; i <= 5; i++)
    6 {
    7 str += Convert.ToChar(random.Next('A', 'Z'));
    8 fixed (char* p = str)
    9 Console.WriteLine((int)p);
    10 }
    11 Console.WriteLine(str);
    12 }

    ? ? ? ??上述的代碼是在做字符串修改,你可能會覺得這種修改返回一個新值沒問題。

    ? ? ? 但是下面的這種情況對于解析器來說就是一種致命傷了。在截取字符串時,你會發現每一次值都是不一樣的,縱使你截取的位置是相同的,Substring始終如一的返回一個新對象給你。

    1 unsafe
    2 {
    3 var str = "123456";
    4 fixed (char* p = str)
    5 Console.WriteLine((int)p);
    6 fixed (char* p = str.Substring(1, 2))
    7 Console.WriteLine((int)p);
    8 fixed (char* p = str.Substring(1, 2))
    9 Console.WriteLine((int)p);
    10 Console.WriteLine(str);
    11 }

    ? ? ? ? ??對解析過程而言,可能會有頻繁截串的場景,比如隨時都可能要將表達式中的一段數字轉換為一個數值。這種情況,每次都返回一個新的字符串對象,無論性能還是內存都是難以接受的。

    ? ? ? ?你可能有想到C#中的StringBuilder對象,它確實是維護一個緩沖區,可以在做字符串修改的時候保證始終如一的使用同一塊地址,但是這玩意是用來構建字符串的,讀取字符串這貨不行的,所以你看官方連個Substring都不給你。

    ? ? ? 難道必須使用非托管代碼了么?為了保證更快的內存讀取以及更低的內存消耗,難道我要去PInvoke???

    ? ? ? ? ? ?

    ? ? ? 這種問題,微軟的碼農肯定已經意識到了,不然這部分的隨筆。。。我怎么寫下去

    ? ? ? 微軟提供了System.Memory程序集用來幫助我們更方便也更安全的操作內存。

    ? ? ? 我們可以使用ReadOnlySpan來解決上述問題。

    ? ? ??ReadOnlySpan在程序集System.Memory中,是Span的只讀表示。將字符串轉換為一個ReadOnlySpan對象,接著使用ReadOnlySpan來處理字符串,那么上述的問題都可以被解決。

    ? ? ? 然后大致說一下Span,Span可以用于表達任何一段連續內存空間,無論是數組,非托管指針,可獲取到指針值的托管內存等等等等(是不是回憶起當初被指針支配的恐懼感),其實在它內部的實現就是一個指針。相對于C/C++里面的指針需要各種小心翼翼,不敢有一絲怠慢忘記釋放,或訪問到離奇的地址,或因為各種原因變成野指針。Span會在內部維護這個指針的地址,在做指針運算時,會做邊界檢查,在更新引用時,垃圾回收器也能判斷出該如何回收內存。

    ? ? ? 對于Span的解讀,推薦閱讀下面這個系列,作者的解讀非常贊。現在愿意寫博文講清 What、How 和 Why的博主不多了,且讀且珍惜。

    ? ? ??https://www.cnblogs.com/justmine/p/10006621.html

    2.3?利用表達式樹和Emit生成表達式執行代理

    ? ? ?動態生成代理是一個古老的話題。最開始是因為大家都覺得.NET自帶的那個反射操作太慢,怎么說呢,其實對于大部分場景是夠用的,某知名大佬說:

    每每看人在談論代碼時,都說那反射操作是極慢的,萬萬不可取。

    在我自己,卻認為反射之慢不過毫秒。

    用不正當的思路寫出的代碼才會引起真正的慢。

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 樹人Groot

    ? ? ? ? ?

    ? ? ? 之所以會成為一個古老的話題,是因為動態生成代理會出現在太多的業務場景中。

    ? ? ? 最常見的就是快速獲取一個對象指定名稱的成員值,你會看到各色愛寫庫愛造輪子的大佬非常熱衷去搞的個快速對象訪問器什么的。

    ? ? ? 多年前博客園大佬趙姐夫還參與過此事寫過一個庫,地址如下:

    ? ? ? ? ? ??http://blog.zhaojie.me/2009/02/fast-reflection-library.html

    ? ? ??:雖然老趙已經很久沒有更新博客了,但是他的博客還是非常推薦去閱讀一下,內容很豐富,干貨特別多。

    ? ? ? ? ? 博客地址:http://blog.zhaojie.me

    ? ? ? 好了,回過頭來。現在對使用動態生成代理的場景做一個匯總,常出現的場景如下:

  • ?對象序列化反序列化,這種場景多出現于RPC中,代理要把stream轉換為object

  • ?實現ORM,代理要把reader轉換為object(這種其實也是rpc)

  • ?實現AOP,代理要為具體類生成一個包含一系列切面函數的類

  • ?綁定求值,比如模板渲染或YACEP這種對編譯結果調用執行獲取結果的過程

  • ? ? ? ? 動態生成代理實現方式有如下四種:

  • ?利用Expression構造代理方法

  • ?DynamicMethod生成動態函數構造代理方法

  • ?DynamicAssembly構建代理類

  • ?利用CodeDom動態生成程序集,生成代理

  • ? ? ? ?下面大致對上面的四種方式做一個比較


    ExpressionDynamicMethodDynamicAssemblyCodeDom
    優點

    實現的代碼簡單易讀

    原生支持繞過CLR訪問修飾符檢查支持生成類型支持生成類型
    缺點不支持生成類型需要對IL指令有一定了解需要對IL指令有一定了解代碼臃腫
    適用場景邏輯稍簡單的代理邏輯稍簡單的代理功能更完備的代理處理模板化的代碼

    ? ? ? ? ???YACEP在定義可執行對象時,?沒有使用.NET內置的委托,而是定義了兩個接口。

    public interface IEvaluator
    {
    object Evaluate(object state);
    }
    public interface IEvaluator<in TState>
    {
    object Evaluate(TState state);
    }
    ?

    ? ? ? ? ? 那為什么使用接口而不是用委托來定義可執行對象,委托才更符合對可執行對象表述的直覺啊 ?

    ? ? ? ? ? 這是因為YACEP需要支持自定義字面量,自定義函數。

    ? ? ? ? ? 如果生成的是委托,最佳的做法是生成閉包函數,在閉包中保存這些自定義字面量和函數,用EMIT生成一個返回閉包函數的函數。

    ? ? ? ? ? 這種做法確實可以做到,問題是寫出來的EMIT代碼會更多,更難調試和定位錯誤,如何知道是函數的閉包問題還是函數自身問題呢。

    ? ? ? ? ? 那如果不用EMIT的方式生成委托,還可以使用表達式樹。是的,表達式樹在這個方面處理起來比EMIT更有優勢,代碼可讀性更好。而且使用表達式樹還有個巨大的優勢,YACEP編譯的本質其實是將YACEP自定義的抽象語法樹轉換為C#抽象語法樹,表達式樹所定義的抽象語法樹幾乎和YACEP自定義的抽象語法樹是一比一的,這種轉換要比生成IL更簡單。

    ? ? ? ? ? 那為什么YACEP不使用表達式樹呢?

    ? ? ? ? ? 在實現YACEP的編譯過程時,我會先腦補出抽象語法樹轉換出的IL代碼,然后是最終的C#代碼。如何檢驗YACEP生成的結果與我腦補的結果是一致呢?

    ? ? ? ? ? 如果使用表達式樹,我需要debug看表達式樹的樹結構。如果時間允許,我倒是十分愿意去做這樣的事情,可惜YACEP只是我換工作間隙拿來練手的小玩意。EMIT支持生成動態程序集,然后再用ILSpy去檢查生成IL代碼是否符合我預期,讀生成的DLL代碼可是比去看表達式樹的樹結構來的簡單。

    ? ? ? ? ?所以最終在YACEP的代碼里,你可以看到即有表達式樹的代碼也有EMIT的代碼。按照上表的適用場景,表達式樹用于在處理按照給你名稱獲取或設置對象成員值,EMIT為表達式生成最終的執行代理。

    ??


    3.?工具篇

    3.1?測試覆蓋率工具 - Coverlet?

    ? ? ? ? ? ? 測試覆蓋率是啥就不解釋了。YACEP使用xUnit.net做單元測試,在當前以及未來可能的版本中,YACEP始終要求100%的行覆蓋率,99%以上的分支覆蓋率。

    ? ? ? ? ? ? 如何做測試覆蓋率統計?

    ? ? ? ? ? ? 目前?Visual Studio是支持查看測試覆蓋率的,如果安裝了JetBrains的dotCover插件,可以獲得更好的體驗(要錢的)。

    ? ? ? ? ? ? 這些是用來看測試覆蓋率的,如何搞到測試覆蓋率報表呢?

    ? ? ? ? ? ? dotnet在跑測試時,可以通過配置數據收集器來生成測試覆蓋率報告(更詳細配置文檔),示例命令如下:

    dotnet test --collect:"Code Coverage"

    ? ? ? ? ? ?在項目中運行此命令,就會生成一個*.coverage的文件在TestResults文件夾里面。

    ? ? ? ? ? ?噠噠噠噠!我來打開這個文件,看看我的覆蓋率是不是已經100%了呢!

    ? ? ? ? ? ?二進制的,還是專屬文件格式???

    ? ? ? ? ? ?沒事,興許在命令的執行結果里面能找到覆蓋率的值!

    Microsoft (R) Test Execution Command Line Tool Version 16.0.1
    Copyright (c) Microsoft Corporation. All rights reserved.

    Starting test execution, please wait...

    Total tests: 80. Passed: 80. Failed: 0. Skipped: 0.
    Test Run Successful.
    Test execution time: 4.4614 Seconds

    ? ? ? ? ? 嗯!

    ? ? ? ? ? 報告很簡潔嘛!

    ? ? ? ? ? 我想要的覆蓋率呢,到底是個啥數啊!!!

    ? ? ? ? ??二進制文件非得軟件開,我特么VSCode用戶啊!!!

    ? ? ? ? ?命令行執行過程就說跑了多少測試 ,我特么寫了多少測試我自己不清楚么!!!

    ? ? ? ?那有沒有啥工具可以生成不需要特定軟件才能打開的覆蓋率報告,還能在我跑test命令的時候直白的告訴我到底覆蓋了多少代碼呢?

    ? ? ? 要是還能支持一下VSCode就更好了!!!

    ? ? ? 沒有的,別想了,乖乖回去寫代碼,不要有非分之想!

    ? ? ? 非分之想是個好東西!

    ? ? ? 你都不非分一下,咋知道是不是真的沒有!

    ? ? ??Coverlet -?https://github.com/tonerdo/coverlet

    ? ? ? 官方介紹是這么寫的!

    Coverlet is a cross platform code coverage library for .NET Core, with support for line, branch and method coverage.

    ? ? ? 好像可以嘗試一下的樣子啊!

    ? ? ? 安裝.net core global tool

    dotnet tool install --global coverlet.console

    ? ? ? 添加依賴到測試項目中

    dotnet add package coverlet.msbuild

    ? ? ? 帶著漠視整個世界的感情開始執行測試

    dotnet test ./tests/TupacAmaru.Yacep.Test/TupacAmaru.Yacep.Test.csproj ^
    /p:CollectCoverage=true ^
    /p:Exclude=\"[xunit.*]*,[TupacAmaru.Yacep.Test*]*\"^
    /p:CoverletOutputFormat=\"lcov,opencover\" ^
    /p:CoverletOutput=./../../results/coverage/

    ? ? ? 看輸出,好像比之前的輸出多出了一些不得了的東西啊

    Calculating coverage result...
    Generating report '.\..\..\results\coverage\coverage.info'
    Generating report '.\..\..\results\coverage\coverage.opencover.xml'

    +------------------+------+--------+--------+
    | Module | Line | Branch | Method |
    +------------------+------+--------+--------+
    | TupacAmaru.Yacep | 100% | 98.9% | 100% |
    +------------------+------+--------+--------+

    +---------+------+--------+--------+
    | | Line | Branch | Method |
    +---------+------+--------+--------+
    | Total | 100% | 98.9% | 100% |
    +---------+------+--------+--------+
    | Average | 100% | 98.9% | 100% |
    +---------+------+--------+--------+

    ? ? ? 行覆蓋率,分支覆蓋率,方法覆蓋率一目了然,使用還簡單,無需做任何代碼修改,只需要引用一下,再跑一下.net core global tool就好了!

    ? ? ?

    ? ? ?那你以為這個工具的能力就到此為止了嗎?

    ? ? ?沒有的!

    ? ? ?VSCode有個擴展:Coverage Gutters,https://marketplace.visualstudio.com/items?itemName=ryanluker.vscode-coverage-gutters

    ? ? ?它支持顯示全部的語言的代碼覆蓋情況,只要你能給它一個?lcov格式的文件。

    ? ? ?Coverlet?是支持生成lcov格式的文件的,這樣你就可以在跑完測試去看你的代碼到底哪些地方沒有被覆蓋了。

    ? ? ?簡直是我等屌絲程序員的福音有沒有,感謝耶穌大佬,感謝釋迦摩尼先生。

    3.2?覆蓋率報表轉換工具 -?ReportGenerator

    ? ? ?上面的Coverlet配合Coverage Gutters基本可以解決開發過程中98%的代碼覆蓋問題。

    ? ? ?那還有2%呢?

    ? ? ?是很多時候我們需要能夠更直觀看覆蓋率的情況,我們需要對的人類更易讀的報表。

    ? ? ?我們不太可能任何時候都打開VSCode找到Icov文件,再找到源碼逐個去看具體代碼到底有沒有被覆蓋。

    ? ? ?我們需要一種能夠脫離開發環境,脫離源碼去查看覆蓋率的報表。

    ? ? ?最佳的文件格式是什么呢?

    ? ? ?當然是HTML!

    ? ? ?發送HTML的報告給其他人,告訴他,二貨!快,打開你的瀏覽器,看,我的覆蓋率,已經100%!

    ? ? ?是100%哦!? ? ??

    ? ? ?

    ? ? 但是一想到還不知道有沒有工具能夠支撐我們裝逼的內心,就會對著這個世界,悵然若失,淡淡的開始感嘆,人間不值得。

    ? ? 所幸,人間是值得的!!!

    ? ??ReportGenerator -?https://github.com/danielpalme/ReportGenerator

    ? ?官方介紹是這么寫的!

    ?

    ReportGenerator?converts coverage reports generated by OpenCover, dotCover, Visual Studio, NCover, Cobertura, JaCoCo or Clover into human readable reports in various formats.

    ?

    The reports do not only show the coverage quota, but also include the source code and visualize which lines have been covered.

    ?

    ReportGenerator?supports merging several reports into one.

    ?

    ?

    ? ? 恩!給力!

    ? ? 再往下看!!!

    ? ? 竟然提供了.net core global tool。

    ? ? 安裝.net core global tool,搞起!!!

    dotnet tool install -g dotnet-reportgenerator-globaltool

    ? ? 生成HTML格式的報表!

    reportgenerator "-reports:results/coverage/coverage.opencover.xml" "-targetdir:./results/coverage/reports"

    ?瀏覽器打開生成的index.html文件

    ? ? ?

    ? ? ?現在做工具的都好良心!

    ? ? ?操作簡單,功能強大,最關鍵的還不要錢。

    ? ? ?感謝耶穌大佬,感謝釋迦摩尼先生。

    3.3?基準測試工具 - BenchmarkDotNet

    ? ? ??但凡喜歡造輪子(我已經潛意識的把我排除在外了:))的都喜歡一個詞 -?高性能,為了能夠證明自己的輪子性能很贊,出現了各色各樣的性能測試工具。

    ? ? ?個人推薦?BenchmarkDotNet -?https://benchmarkdotnet.org/

    ? ? ?這次就不貼官方介紹了,太長了,有興趣的可以自己去看,英文的!

    ? ? ?這里我把官方的說法做一個簡單的翻譯,大致是這么個意思。

    ? ? ?老郭:搞基準測試不簡單啊!

    ? ? ?老于:咋?您老是搞出啥問題了?

    ? ? ?老郭:您看啊,這要考慮咋設計執行迭代次數?

    ? ? ?老于:對,是這理兒!

    ? ? ?老郭:還要考慮咋做執行預熱?

    ? ? ?老于:對,是這理兒!

    ? ? ?老郭:還要考慮咋樣支持不同平臺?

    ? ? ?老于:對,是這理兒!

    ? ? ?老郭:人間不值得啊!

    ? ? ?老于:啊? 剛剛人家和尚還說人間是值得的,還感謝耶穌大佬,感謝釋迦摩尼先生呢!

    ? ? ?老郭:那您?是有好招?

    ? ? ?老于:對的,推薦一個小玩意給您得了!

    ? ? ?老郭:甭管啥東西?得!放著好用就成,您給我掰哧掰哧!

    ? ? ?老于:知道金坷垃么?

    ?? ? 老郭:金坷垃?

    ? ? ?老于:哦,不?是BenchmarkDotNet!

    ?? ? 老郭:那是嘛玩意?

    ? ? ?老于:您啊,剛說的那些問題BenchmarkDotNet都能解決!比如說這設計迭代執行次數的問題,人家這庫自動幫您選,都不帶要您動手的!

    ?? ? 老郭:這勁兒勁兒的!

    ? ? ?老于:庫那邊,引用一下,給您的類或方法打幾個特性標記一下,代碼就搞完了!

    ?? ? 老郭:這勁兒勁兒的!

    ? ? ?老于:想測試不一樣的平臺?什么.netfx,.netcore,corert和mono啊,統統支持!

    ? ? ?老郭:這勁兒勁兒的!

    ? ? ?老于:想測試不一樣的處理器架構?x86支持!x64支持!

    ? ? ?老郭:這勁兒勁兒的,勁兒勁兒的!

    ? ? ?老于:想測試不一樣的JIT版本?LegacyJIT支持!RyuJIT支持!

    ? ? ?老郭:這倍兒勁兒啊!

    ? ? ?老于:GC標記不一樣也想測?服務器,工作站都支持!除此以外,還支持各種參數搞出不一樣的結果!

    ?? ? 老郭:我算是聽明白了,是個夠勁兒的玩意,那它支持生成啥樣的報告呢?

    ? ? ?老于:GitHub的文檔格式,StackOverflow的文檔格式,RPlot,CSV,JSON,XML還有HTML!哎,還有特性我還沒說完呢,您這是要干啥去啊!

    ? ? ?老郭:我回家開電腦去啊!

    ? ? ?老于:這火急火燎的回去下種子?啥片子啊,給我也發一份啊!

    ? ? ?老郭:我回家開電腦開VS下BenchmarkDotNet去啊!

    ? ? ? 在GitHub上,tupac-amaru?組織下有個開源的項目benchmarks:?https://github.com/tupac-amaru/benchmarks

    ? ? ? 這個項目是一個基于BenchmarkDotNet?的一個基準測試項目模板。

    ? ? ? 包含了一個基準測試項目的腳手架工程。還有準備了可以直接運行的腳本。

    ? ? ? 面向windows用戶的上可用的bat腳本和Docker腳本。

    ? ? ? 面向Mac/Linux上可用的sh腳本和Docker腳本。

    ? ? ? 有興趣的可用去看一下。因為編寫基準測試的代碼已經有具體的示例項目,網上也有大量的相關博文,這里就不再做詳細介紹。

    ? ? ? 不過網上對很少有解讀生成的報告的,在這里我嘗試解讀一下。

    ? ? ? 在YACEP的基準測試報告中:https://github.com/tupac-amaru/yacep/tree/_benchmark#atomicvaluestring?

    ? ? ? 上面的報告來自代碼:https://github.com/tupac-amaru/yacep/blob/master/tests/TupacAmaru.Yacep.Benchmark/AtomicValue/String.cs

    ? ? ? 這個代碼是用來測試YACEP將表達式中的字符串轉換為C#字符串的能力。

    ? ? ? 字符串和數值是表達式的幾大基本數據類型之一,所以YACEP必須要對字符串負責,不能面對字符串表達式硬氣不起來,要硬,要有一定的性能。

    ? ? ? 上面的報告有兩部分信息。

    ? ? ? 第一部分顯示的是這個基準測試運行的宿主機配置以及為基準測試配置的參數。

    ? ? ??宿主機配置信息:

    BenchmarkDotNet=v0.11.5, OS=ubuntu 16.04
    Intel Xeon CPU E5-2673 v3 2.40GHz, 1 CPU, 2 logical and 2 physical cores
    .NET Core SDK=2.2.204
    [Host] : .NET Core 2.2.5 (CoreCLR 4.6.27617.05, CoreFX 4.6.27618.01), 64bit RyuJIT
    • 所用BenchmarkDotNet的版本是0.11.5

    • 操作系統是Ubuntu 16.04

    • CPU型號E5-2673 v3 2.40GHz, 1 CPU, 2 logical and 2 physical cores

    • 后面一部分是.NET Core的信息

    ? ? ? 為基準測試配置的參數(官方文檔):

    Toolchain=InProcessEmitToolchain InvocationCount=8 IterationCount=200
    LaunchCount=1 RunStrategy=Throughput UnrollFactor=4
    WarmupCount=1
    • Toolchain參數,用來配置用于生成,構建和執行具體基準測試工具鏈的類型。InProcessEmitToolchain參數的意思是用在進程內用emit的方式生成用于做基準測試的對象,而不生成新的可執行文件去獨立運行。

    • InvocationCount,是指在單次迭代中一個方法的調用次數。該值必須是后面值UnrollFactor的倍數。

    • IterationCount,是指在測試過程中迭代的總數。

    • LaunchCount,是指需要使用的進程總數。

    • RunStrategy,這個參數在這個基準測試中配置其實無意義的,不指定的話,默認值就是Throughput。

    • UnrollFactor,是指基準測試的過程中方法在循環中循環執行的次數。

    • WarmupCount,是指預熱的次數?

    ? ? ? 第二部分是一張表,有六列,各列的意思大致如下:

    • Method,代表測試的方法。如果一個基準測試中包含多個測試方法,就可以用來橫向比較各個方法的測試結果

    • StringLength,這是一個自定義參數(代碼)。表示YACEP處理的隨機字符串長度。

    • Mean,是指方法執行時間的平均值,和后面的中值不一樣,{1, 2, 5, 8}的均值是(1+2+5+8)/4=4,?{1, 2, 5, 8, 10}的均值是(1+2+5+8+10)/5=5.2

    • Error,置信區間。

    • StdDev,執行時間的偏差,值越大,偏差越大

    • Median,是指方法執行時間的中值,和前面的均值不一樣,{1, 2, 5, 8}的中值是中間兩個數的均值(2+5)/2=3.5,?{1, 2, 5, 8, 10}的中值是中間那個值5

    ? ? ? 好了,現在來解讀一下這個報告的最后一行。

    ? ? ??從表達式中將長度為1000的字符串轉換C#字符串,YACEP平均處理時間是194.1ns.?

    ? ? ? ? ?注:1秒=1000000000 納秒,以后誰說C#性能不好,去,錘他!

    ?


    ?

    ?4.?服務篇

    ? ? ?借助于上面的工具,我們已經可以在本地做單元測試,計算覆蓋率,拿到更易讀的覆蓋率報告以及基準測試報告。

    ? ? ?但是!這還不夠好,我們的代碼不可能總是要人去跑測試,要人去執行命令行代碼獲取覆蓋率,要人去跑基準測試再拿具體的報告。

    ? ? ?很早很早之前一位來自中國的和尚曾有言:

    道求道,佛家求善,儒學求中庸。如是搞IT的,當求懶!

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--?沃·茲基碩德

    ? ? ?說的對,搞IT的就是應該求!!!

    ??

    ?

    ? ? ?懶???難道意味著啥都不做?

    嘿,老板!我,告訴你,作為搞IT的,大佬說要追求懶!

    所以,從明天開始,我~決定啥都不做!

    面對我~這樣一個有追求的程序員,請記得!要多發一倍工資給我!? ? ?

    老板看了看你,徑直走到門前,關上門,再慢悠悠的走到窗前,緩緩的拉下百葉窗。

    偌大的辦公室暗了下來。

    整個辦公室,除了你,就剩他。

    只見點燃一根煙,靠著沙發坐了下來,若有所思。

    沉默著抽完一整支煙。

    正欲張口,忽聽前臺小妹一聲尖叫。

    心中暗道:莫不是婦產科醫院的結果出來了?

    欲知后事如何,請看下篇!

    原文地址:https://www.cnblogs.com/wushilonng/p/10917619.html

    .NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?

    總結

    以上是生活随笔為你收集整理的在上司面前硬不起来?教你如何快速将字符串转换为可执行代码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    日韩电影一区二区三区 | 日本中文字幕久久 | 怡春院av| 午夜久久福利视频 | 国产在线一区观看 | 欧美激情在线网站 | 亚洲成a人片在线www | 狠狠干网址| 青青草国产精品视频 | 日韩一区二区三免费高清在线观看 | 国产精品久久久久久久久久久久午 | 九九九九免费视频 | 超碰在线97观看 | 国产成人一区二区三区 | 日本中文乱码卡一卡二新区 | 中文字幕在线字幕中文 | 在线91网 | 成人av电影免费在线观看 | 中文字幕一区二区三区四区在线视频 | 精品亚洲二区 | 色网址99 | 亚洲理论在线观看 | 国产精品久99 | 91av视频免费观看 | 337p西西人体大胆瓣开下部 | 欧美日韩国产精品一区二区亚洲 | 国产1级毛片 | 日韩在线观看小视频 | 国产高清无av久久 | 久久九九免费视频 | 97爱 | 国产 一区二区三区 在线 | 日韩三级视频 | 亚洲欧美日韩精品久久久 | 国产亚洲在线观看 | 国产在线精品视频 | 91成人精品视频 | 91看片在线免费观看 | 国产午夜精品视频 | 亚洲成人精品av | 国内精品国产三级国产aⅴ久 | 99热精品国产 | 欧美极度另类 | 中文字幕在线乱 | 婷婷视频 | 欧美黄在线 | jizz18欧美18 | 久久人91精品久久久久久不卡 | 免费观看的av网站 | 亚洲视频一区二区三区在线观看 | 国产香蕉久久 | 亚洲免费成人 | 亚洲人成网站精品片在线观看 | 精品国产福利在线 | 国产成人精品999 | 国产私拍在线 | 91免费在线看片 | 成人在线视频在线观看 | 五月天婷婷丁香花 | 日日精品| 九九av| 国产日韩在线看 | 亚洲免费小视频 | 国产二区av| 在线视频观看你懂的 | 伊人网综合在线观看 | 国产 日韩 欧美 中文 在线播放 | 精品久久中文 | 亚洲精品乱码久久久久久蜜桃91 | 久精品视频在线观看 | 精品福利视频在线观看 | 国产一区二区不卡视频 | 欧美精品被 | 1024久久| 天天操天天操天天操天天操天天操天天操 | 精品国产精品一区二区夜夜嗨 | 九九久久国产精品 | 超碰资源在线 | 久久综合在线 | 97超碰影视 | 久久久久久久久久久久影院 | 国产中文字幕视频在线观看 | 色网站在线观看 | 人人干人人做 | 国产人免费人成免费视频 | 亚洲六月丁香色婷婷综合久久 | 四虎成人精品永久免费av | 色窝资源| 叶爱av在线| 国产99久久久国产 | 最近的中文字幕大全免费版 | 免费一级日韩欧美性大片 | 日本久久成人中文字幕电影 | 国产精品一区二区三区在线播放 | av中文字幕日韩 | av大片免费在线观看 | 色偷偷av男人天堂 | 日韩三级视频在线观看 | 久久国产精品二国产精品中国洋人 | 国产中文视 | 999久久| 91香蕉亚洲精品 | 日韩免费在线视频 | 娇妻呻吟一区二区三区 | 国产精品久久精品国产 | 欧美日韩一级在线 | 精品在线观看免费 | 高清av在线免费观看 | www.久久色 | 精品日韩在线一区 | www.午夜视频 | 最新午夜| 在线免费高清一区二区三区 | 91九色蝌蚪在线 | 99热在线精品观看 | 国产一区在线不卡 | 91自拍视频在线观看 | 久久久久99999 | 精品国产观看 | 免费h精品视频在线播放 | 麻豆视频国产在线观看 | 91成人免费视频 | 激情久久小说 | 亚洲一二三在线 | 91av资源在线| 亚洲男男gaygay无套 | 91精品国产自产老师啪 | 99精品偷拍视频一区二区三区 | 91色亚洲| 久久国产精品小视频 | 久草在线视频国产 | 日韩精品视频网站 | 韩国精品福利一区二区三区 | 成人va天堂 | 久久96国产精品久久99软件 | 国产成人精品一区二区三区福利 | 国产一级久久久 | 国产精品热 | 一区二区伦理电影 | 亚洲黄色免费网站 | 婷婷5月色 | 久久激情电影 | 人人干人人模 | 中国一级片在线 | 婷婷久久网 | 91禁在线看| 日韩精品视频免费 | av片子在线观看 | 精品五月天 | 97超级碰| 在线观看日韩国产 | 97超碰在线资源 | 欧美一级性生活视频 | 国产精品综合在线 | 五月天综合色 | 91免费网址 | 亚洲精品av在线 | 午夜精品一区二区三区视频免费看 | 黄色app网站在线观看 | 高清精品在线 | 欧美一进一出抽搐大尺度视频 | 992tv在线| 欧美性生活大片 | 亚州精品天堂中文字幕 | 9999免费视频 | 国产精品第一页在线 | 国产精品video | 国产精品va在线播放 | 国产精品免费一区二区 | 在线天堂中文在线资源网 | 免费av影视 | 久久久国产精品电影 | 免费观看性生交大片3 | 精品乱码一区二区三四区 | 久久精品中文视频 | 国产精品99久久久久人中文网介绍 | 国偷自产中文字幕亚洲手机在线 | 国产高清视频色在线www | 成人黄色大片网站 | 一级a毛片高清视频 | 亚洲最新av在线 | 中文av不卡 | 免费观看一区二区 | 中国一级特黄毛片大片久久 | 五月色丁香 | av一区在线播放 | 精品国产一区二区三区久久久 | 日韩免费电影一区二区三区 | 亚洲成人网av | 国产资源精品 | 国产福利在线免费观看 | 婷婷射五月 | 4438全国亚洲精品观看视频 | 久久精品高清视频 | 久久精品伊人 | 亚洲理论电影 | 亚洲 综合 国产 精品 | 97人人添人澡人人爽超碰动图 | 亚洲激情在线视频 | 亚洲丝袜中文 | 中文字幕精品一区久久久久 | 成人免费观看网站 | a色视频 | 99久热在线精品视频观看 | 久久大片网站 | 亚洲精品国产片 | 国产香蕉视频在线播放 | 久久精品96 | 国产精品人成电影在线观看 | 久久天堂影院 | wwwwwww黄| 亚洲影视九九影院在线观看 | 久久免费视频播放 | 国产手机视频在线播放 | 岛国一区在线 | av网站在线免费观看 | 最近中文字幕国语免费高清6 | 国产又粗又猛又黄又爽 | 正在播放国产一区二区 | 国产区在线视频 | 五月天久久综合网 | 7777xxxx| 狠狠色2019综合网 | 成人丁香花 | 九九热在线视频免费观看 | 日韩欧美xxxx| 怡红院成人在线 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 国产九色91 | 国产中文字幕视频在线 | 亚洲黄色免费在线 | 日本黄色免费在线 | 国产一区二区三区四区在线 | 亚洲精品视频在线观看免费 | 精品国产乱码一区二 | 91视频在线观看免费 | 国产黄网站在线观看 | 三级av网站 | 亚洲爽爽网 | 亚洲精品男人的天堂 | 涩五月婷婷 | 免费福利在线 | 99久视频| 91九色porny蝌蚪视频 | 亚洲在线视频网站 | 中文字幕 影院 | 在线免费观看成人 | 怡红院av久久久久久久 | 日韩av不卡播放 | 久久精品国产免费看久久精品 | 日韩欧美在线第一页 | 91看片网址 | 色com| 久久精品艹 | 国产又黄又爽又猛视频日本 | 日韩美女黄色片 | 午夜三级毛片 | 国产免费专区 | 免费网址在线播放 | 欧美日韩国产精品一区二区 | 亚洲日本va午夜在线电影 | 成人免费在线播放视频 | 91精品人成在线观看 | 久久夜av| 91免费的视频在线播放 | 免费观看成人 | 亚洲综合色丁香婷婷六月图片 | 一区二区三区四区精品 | 91探花系列在线播放 | 99色在线播放 | 久久久精品国产一区二区电影四季 | 精品国模一区二区三区 | 91av99| 丁香六月天 | 精品v亚洲v欧美v高清v | 国产精品美女久久久免费 | www.婷婷色| 天天天色综合a | 午夜精品影院 | 午夜久久久精品 | 91免费在线播放 | 国产在线精品一区二区 | 色多多污污| 久久av伊人 | 国产亚洲精品久久久久久久久久久久 | 亚洲一区二区高潮无套美女 | 在线免费视频你懂的 | 91精品国产麻豆 | 99视频 | 91精品久久久久 | 免费观看一级一片 | 亚洲激色| 久久免费精品一区二区三区 | 国产原创在线观看 | 91亚洲狠狠婷婷综合久久久 | 免费网站黄 | 精品一区二区综合 | 久久久久免费网 | 色婷婷电影网 | 激情五月婷婷丁香 | 亚洲日本一区二区在线 | 国产精品黄色 | 日韩精品久久中文字幕 | 日韩一二区在线观看 | 天天摸天天操天天爽 | 色a网 | 欧美日韩久久 | 国产一级片播放 | 免费在线一区二区 | 亚洲国产97在线精品一区 | 久久久99精品免费观看 | 日操干| 视频在线日韩 | 日精品| www天天干com | 黄色小说免费观看 | 国产高清视频免费最新在线 | 久久久精品久久日韩一区综合 | 久久国产精品久久精品国产演员表 | 亚洲日本韩国一区二区 | 91激情 | 国产精品久久久久久久久蜜臀 | 国产成人久久精品亚洲 | 日韩高清在线一区二区三区 | 精品国产乱子伦一区二区 | 国产精品国产三级国产不产一地 | 丁香五香天综合情 | 成人黄色短片 | 五月激情亚洲 | 久久免费视频国产 | 国内精品久久影院 | 又黄又爽的免费高潮视频 | 久久久久久中文字幕 | 国产黄色精品在线观看 | 国产黄在线播放 | 91高清免费 | 五月天伊人 | 欧美日韩免费视频 | 久久综合毛片 | 精品国产美女在线 | 国产福利资源 | 五月婷婷久久丁香 | 国产亚洲精品bv在线观看 | 精品久久一区二区三区 | 久久精品精品电影网 | 伊人色综合久久天天网 | 国产一二三四在线视频 | 亚洲精品免费播放 | 中文字幕亚洲高清 | 天天干天天干天天干天天干天天干天天干 | 中文字幕中文字幕在线中文字幕三区 | 国产九色视频在线观看 | 成人免费视频观看 | 在线观看免费黄视频 | 黄色电影网站在线观看 | 国产精品免费久久久久久 | 网站免费黄 | 日日操日日操 | 日日爱视频| 午夜精品成人一区二区三区 | 成人va视频 | 久久综合狠狠综合久久综合88 | 日韩美女久久 | 在线观看免费视频 | 狠狠操.com| 中文字幕在线免费观看视频 | 久久久久国产免费免费 | 最新中文字幕视频 | 精品一区二区在线看 | 日本大尺码专区mv | 亚洲专区在线播放 | 亚洲视频www | 国产日韩欧美自拍 | 精品国产成人av在线免 | 2022久久国产露脸精品国产 | 高清免费av在线 | 精品国产资源 | 国产中文字幕在线免费观看 | 日日日爽爽爽 | 日韩欧美在线综合网 | 中文视频在线播放 | 国产一区二区三区免费观看视频 | 91在线视频在线观看 | 日韩成人高清在线 | 日韩欧美高清一区二区 | av免费黄色| 五月婷婷在线观看视频 | 成人毛片在线观看视频 | 天天干夜夜操视频 | 亚洲永久精品国产 | 亚洲人成网站精品片在线观看 | 午夜精品一区二区三区视频免费看 | 日韩电影在线观看一区 | 91免费高清 | 中文字幕日韩免费视频 | 国内三级在线观看 | 2019av在线视频| 久艹视频在线免费观看 | 最近日本字幕mv免费观看在线 | 天天草天天操 | 久色网| 精品视频免费观看 | 欧美一区,二区 | 国产高清视频免费观看 | 亚洲精品久久久久中文字幕m男 | 国产精品国产精品 | 欧美午夜精品久久久久 | 在线观看网站av | 日本久久久精品视频 | 亚洲精品在线资源 | 国产日产av | 亚洲激情电影在线 | 国产成人精品在线观看 | 97**国产露脸精品国产 | 韩国av一区二区三区在线观看 | av高清免费 | 国产精品乱码一区二区视频 | 97超碰在线资源 | 国产精品久久久亚洲 | 成人影片在线播放 | 国产小视频免费在线网址 | 久久er99热精品一区二区三区 | 五月激情姐姐 | 中文乱幕日产无线码1区 | 婷婷色在线观看 | 精品亚洲一区二区 | 日韩精品2区 | 一级黄色片在线播放 | 成年人在线免费看 | 久久久久久久久久久黄色 | a√国产免费a | www黄色软件 | 99精品福利| 精品国产一区二区三区日日嗨 | 国产黄色片久久 | www.伊人网| 色婷婷激情 | 日本三级中文字幕在线观看 | 亚洲一二三在线 | 久久99国产视频 | 久久99久久久久久 | 日韩国产精品毛片 | 免费高清在线观看成人 | 国产黄色美女 | 久久久久北条麻妃免费看 | 一级黄色片在线观看 | 欧美国产不卡 | 中文字幕丝袜制服 | 色福利网 | 日韩欧美一区二区三区在线 | 特级a老妇做爰全过程 | av高清影院 | 2023国产精品自产拍在线观看 | 97精品一区 | 色多多视频在线观看 | 久章草在线观看 | 99热在线观看 | 美女久久精品 | 在线你懂 | 欧美影院久久 | 国产剧情一区在线 | 久久免费国产视频 | 亚洲综合视频在线 | 91精品国自产在线偷拍蜜桃 | 国产视频在线看 | 夜色资源站国产www在线视频 | 亚洲精品视频在线播放 | 天天做天天爱天天爽综合网 | 亚洲久草视频 | 久久国产综合视频 | 91热视频在线观看 | 国产精品久久久久久久久久久久久久 | 国产精品嫩草55av | 中文字幕在线播出 | 亚洲成年片 | 韩国av在线播放 | 国产精品日韩在线 | 欧美日韩高清一区二区 | 婷婷丁香久久五月婷婷 | 在线免费观看视频一区二区三区 | 久久亚洲影院 | 毛片a级片 | 成人免费在线观看入口 | 深夜免费福利 | 狠狠狠狠狠狠天天爱 | 国产亚洲精品久久久久久久久久 | 激情欧美xxxx | 国产精品美女999 | 国产在线a| 国产免费久久 | 欧美a级在线播放 | 国产高清99 | 成人免费看黄 | 久久av福利| 黄色成年 | 久久色视频 | 粉嫩av一区二区三区免费 | 国产黄a三级 | 91热爆视频 | 在线免费黄色av | 999电影免费在线观看2020 | 一级性视频 | 超碰在线98 | 天天干夜夜爱 | 奇米网8888 | 六月丁香六月婷婷 | 视频在线亚洲 | 成人在线黄色 | 这里只有精品视频在线 | 欧美国产精品一区二区 | 天天操综| 国产亚洲片| 亚洲在线视频免费 | 免费看的国产视频网站 | 精品你懂的 | 精品国产视频一区 | 在线播放日韩av | 久福利 | 日批在线观看 | 视频一区二区在线观看 | 久久一区二区三区四区 | 欧美另类性 | 色国产视频 | 国产亚洲小视频 | 亚洲一区二区三区在线看 | 久久久综合 | 日韩精品一区二区在线视频 | 日韩欧美在线不卡 | 天天做日日做天天爽视频免费 | 欧美日韩一区二区三区不卡 | 国产天天综合 | 国产成人精品一区二区三区在线 | 亚洲视频在线免费看 | 久草视频免费看 | 日韩经典一区二区三区 | 伊人av综合| 91精品国产自产在线观看 | 欧美一二三专区 | 97成人精品视频在线播放 | 国产精品破处视频 | 中文字幕免费 | 国产伦理一区 | 蜜臀av.com| 国产精在线 | 一区二区三区电影在线播 | 国产成人精品亚洲日本在线观看 | 亚洲精品女 | 日韩视频www| 国产a高清 | 欧美韩日精品 | 91九色视频 | 成人天堂网| 4hu视频| 国产精品午夜8888 | 亚洲美女精品视频 | 国产97视频在线 | 免费福利视频网站 | av大全免费在线观看 | 国产一区视频免费在线观看 | 午夜视频播放 | 伊人中文在线 | 九九热在线播放 | 天天草视频 | 国内精品中文字幕 | 四虎影视欧美 | 久久久久亚洲精品国产 | 天天色天天爱天天射综合 | 国产91aaa | 大荫蒂欧美视频另类xxxx | 欧美人zozo | 亚洲综合一区二区精品导航 | 综合在线观看 | 久草精品视频在线观看 | 日韩av综合网站 | 成人在线视频你懂的 | 久久国产网站 | 国产精品视频全国免费观看 | 成 人 黄 色 视频 免费观看 | 黄色三级在线 | av 一区二区三区 | 99久久精品国产一区二区三区 | 亚洲国产精久久久久久久 | 视频在线一区 | 国产日产在线观看 | 久久久香蕉视频 | 国产在线观看不卡 | 成人一区二区三区在线 | 日韩伦理片一区二区三区 | 成人wwwxxx视频| 亚洲精品一区二区在线观看 | 一区二区三区在线播放 | 日韩欧美视频在线 | 天天干.com | 免费av大片 | 三日本三级少妇三级99 | 久久99最新地址 | 97超碰在线人人 | 国产精品久久久久999 | 视频91 | 国产 欧美 日产久久 | www.香蕉视频 | 国产经典三级 | 国产精品美女久久久久aⅴ 干干夜夜 | 91亚洲精品国偷拍 | 蜜臀av夜夜澡人人爽人人 | 蜜臀一区二区三区精品免费视频 | 丁香六月中文字幕 | 久久99久久99精品免视看婷婷 | 国产精品av在线免费观看 | 婷婷六月综合亚洲 | 欧美 国产 视频 | 国产精品久久艹 | 国产短视频在线播放 | 中文字幕 国产视频 | 亚洲高清视频在线观看 | 国产成人亚洲在线观看 | 日韩在线第一 | 在线 精品 国产 | 99精品视频在线观看播放 | 欧美另类高清 | 国产剧情在线一区 | 99热精品国产一区二区在线观看 | 8090yy亚洲精品久久 | 91av视频在线观看 | 最近日韩中文字幕中文 | 黄色一级免费网站 | 992tv在线观看网站 | 国产黄在线 | 国产在线观看,日本 | 亚洲日本色 | 亚洲综合视频在线播放 | 国产r级在线观看 | 欧美精品资源 | 97在线影视 | 久草视频国产 | 久久久影院官网 | 日韩1级片 | 亚洲视频h| 久久久受www免费人成 | 亚洲一区精品人人爽人人躁 | 黄色一级大片在线免费看国产一 | 日韩大片在线免费观看 | 亚洲91精品在线观看 | 视频三区| 国产1区2 | 黄色在线观看网站 | 精品久久国产 | av在线短片| 日韩国产高清在线 | 91成人午夜 | 国产精品www | 亚洲黄色在线 | 西西大胆免费视频 | а天堂中文最新一区二区三区 | 天天色天天射天天干 | 婷婷五天天在线视频 | 国产小视频在线 | 婷婷久久久久 | 男女免费视频观看 | 中文在线免费视频 | 日韩久久久久久久久久久久 | 蜜臀av夜夜澡人人爽人人 | 97天天综合网| www.亚洲黄| 国色天香第二季 | 亚洲成人免费观看 | 日韩精品不卡在线 | 国产 日韩 在线 亚洲 字幕 中文 | 91亚洲精品久久久蜜桃借种 | 国产欧美久久久精品影院 | 久久综合免费 | 精品一区电影 | 日韩在线视频网址 | 国产群p视频| 久久99精品久久久久蜜臀 | 在线综合 亚洲 欧美在线视频 | 天堂av影院 | 国产精品日韩 | 97国产超碰| 国产成人亚洲精品自产在线 | 九九久久久久久久久激情 | 91在线播放综合 | 中文字幕一区二区三区久久蜜桃 | 美女视频是黄的免费观看 | 免费av高清 | 色综合久久天天 | 精品国产一二三四区 | 亚洲激情视频 | 国产精品久久久久影院 | 精品国产电影一区 | 超碰在线天天 | 激情开心 | 国产精品高潮呻吟久久久久 | 欧美成人性网 | 色久五月 | 欧美亚洲精品一区 | www.色婷婷 | 天天操天天射天天操 | 色999视频 | 国产高清黄色 | 欧美先锋影音 | 韩国av一区二区 | 国产视频在线播放 | 久久久www成人免费精品 | 国产高清日韩 | 精品国产成人av | 日韩欧美高清一区二区三区 | www.亚洲精品 | 激情视频免费观看 | 成人免费看黄 | av字幕在线| 999久久精品 | 成人a毛片| 一区二区三区四区五区在线 | 久久久综合香蕉尹人综合网 | 久久人人爽人人爽人人片av免费 | 久久综合给合久久狠狠色 | 久草a在线| 尤物九九久久国产精品的分类 | 成人一级影视 | 国产香蕉av | 五月婷婷久久综合 | 精品人人爽 | 最新婷婷色 | 国产一区二区视频在线 | www国产亚洲 | 日韩免费视频线观看 | 久久久高清一区二区三区 | 黄色大片网 | 中字幕视频在线永久在线观看免费 | 国产又粗又硬又长又爽的视频 | 国产特级毛片aaaaaa | 久久99久久99免费视频 | 最近高清中文字幕在线国语5 | 国产精品麻豆三级一区视频 | 国产不卡在线播放 | 精品综合久久久 | 91社区国产高清 | 一级黄色电影网站 | 国产精品成人久久久久 | 五月婷婷激情综合 | 97超级碰碰碰碰久久久久 | av中文字幕在线电影 | 视频在线91 | 88av网站| 一级α片免费看 | 一区二区三区在线观看免费 | 久久久久久免费视频 | 99精品在线免费视频 | 久久视频在线看 | 免费福利在线播放 | 韩日电影在线 | 麻豆视频www| 欧洲av不卡 | 久久黄色成人 | 国产精品久久久久久电影 | 久久开心激情 | 欧美国产大片 | 亚洲精品成人av在线 | 亚洲国产高清在线观看视频 | 色婷婷色 | 99久久精品无码一区二区毛片 | 天天操天天射天天爱 | 国产日韩三级 | 91手机视频在线 | japanesexxxxfreehd乱熟 | 亚洲国产中文字幕 | 手机av网站| 久久国产精品成人免费浪潮 | 欧美视频在线二区 | 亚洲免费av一区二区 | 久久亚洲成人网 | 国产欧美精品一区二区三区四区 | 国产视频一二三 | 免费看的黄色 | 亚洲人成免费 | 日韩av有码在线 | 在线观看日韩一区 | 97激情影院 | 久久在线观看视频 | 日韩成人av在线 | 国产精品男女啪啪 | 久久精品日产第一区二区三区乱码 | 亚洲成人黄色 | a视频免费在线观看 | 中文字幕亚洲国产 | 日韩电影在线观看一区 | 高清av免费看| 天天射,天天干 | 婷婷免费视频 | 激情av网址 | 久草国产精品 | 欧美精品一区二区性色 | 在线观看成人一级片 | 成人福利在线观看 | 免费在线观看av网址 | 久久久国产精品成人免费 | 91亚洲网| 色片网站在线观看 | 在线小视频国产 | 精品久久久久亚洲 | 人人干干人人 | 欧美日韩视频一区二区三区 | 五月婷婷电影网 | 久久国产露脸精品国产 | 免费高清在线视频一区· | 欧美日韩成人一区 | 久久国产热 | 综合国产视频 | 少妇激情久久 | 国内综合精品午夜久久资源 | 国产一区黄色 | 天天操网站 | 91av观看 | 91一区一区三区 | 狂野欧美激情性xxxx欧美 | 国产超碰97 | 日韩性片| av三级在线免费观看 | 久久久久美女 | 国产亚洲视频中文字幕视频 | 中文字幕亚洲欧美 | 国产精品亚洲片在线播放 | 中文字幕在线看视频 | 99精品欧美一区二区三区黑人哦 | 五月婷婷综合在线视频 | 日日干干夜夜 | 国产精品xxxx18a99 | 婷婷午夜天 | 免费在线看成人av | 中文字幕在线观看第二页 | 免费在线观看一区二区三区 | 国产国产人免费人成免费视频 | 91黄色视屏| 日韩在线观看第一页 | 成年人在线免费看视频 | 五月天久久久久久 | 91av官网 | 国产精品资源网 | 国内一级片在线观看 | 韩国av免费观看 | 久久深夜福利免费观看 | 水蜜桃亚洲一二三四在线 | 天天干天天摸天天操 | 91福利试看| 在线免费观看一区二区三区 | 国产97av| 欧美日韩在线免费视频 | 91九色性视频 | 日韩二区三区在线观看 | 色吊丝在线永久观看最新版本 | 久久99在线| 6080yy午夜一二三区久久 | 日韩免费电影在线观看 | 色婷婷综合成人av | 在线观看成年人 | 欧美调教网站 | 在线a人片免费观看视频 | 51久久成人国产精品麻豆 | 91成版人在线观看入口 | 国产黄色精品在线 | 久久精品毛片基地 | 国产精品不卡av | 成年人在线免费看片 | 国产精品免费一区二区三区在线观看 | 国产伦精品一区二区三区照片91 | 香蕉影视在线观看 | 在线黄色国产 | av国产网站 | 中文字幕在线一区二区三区 | 日本乱码在线 | 精品视频123区在线观看 | 亚洲国产精品电影在线观看 | 午夜av一区 | 色综合天天综合 | 操操操操网 | 一区二区三区四区精品视频 | a在线一区 | 国产午夜精品久久 | 久久不卡免费视频 | 亚洲最新视频在线播放 | 开心丁香婷婷深爱五月 | av片子在线观看 | 激情欧美一区二区三区免费看 | 91最新中文字幕 | 深爱激情五月综合 | 玖玖国产精品视频 | 91九色视频在线播放 | 午夜色站 | 最新动作电影 | 91精品对白一区国产伦 | av福利在线看 | 深夜福利视频在线观看 | 精品久久网站 | 国产福利91精品 | 黄色的片子 | 国产成人福利片 | 丁香在线视频 | 成人免费ⅴa | 一级黄色大片 | 久久精品久久精品久久 | 国产精品高清在线观看 | 麻豆影视在线免费观看 | 高清av影院 | 中文字幕无吗 | 中文字幕在线观看免费高清电影 | 摸bbb搡bbb搡bbbb | 狠狠的干狠狠的操 | 中文字幕一区二区在线播放 | 欧美成人按摩 | 成人免费观看网址 | 亚洲视频精品 | 日韩欧美一区二区不卡 | 美女久久| 干狠狠| 四虎国产精品免费 | 久精品视频免费观看2 | 国产一区 在线播放 | 亚洲九九影院 | 中文字幕在线观看不卡 | 日韩在线 一区二区 | 日韩中文在线视频 | 精品国产一区二区三区久久久蜜月 | 久久理论电影网 | 欧美一进一出抽搐大尺度视频 | 日韩欧美精品在线观看视频 | 悠悠av资源片 | 欧美网址在线观看 | 日本三级不卡视频 | 日韩免费高清在线观看 | 人人玩人人添人人澡超碰 | 骄小bbw搡bbbb揉bbbb | av网在线观看 | 久久a级片 | av免费看网站 | 久草在线观看资源 | 中文字幕成人 | 奇人奇案qvod| 欧美一二三区在线观看 | 综合色在线 | 久久视频在线 | 天天操天天射天天添 | 国产超碰在线观看 | 欧美孕妇视频 | 免费看在线看www777 | 在线成人免费电影 | 狠狠躁18三区二区一区ai明星 | 精品影院一区二区久久久 | h视频在线看 | 日本中文字幕观看 | 99精品热视频只有精品10 | 国产视频2 | 日本婷婷色| 91完整版 | 在线国产99 | 玖玖视频网 | 日韩午夜剧场 | 亚洲视屏在线播放 | 色网站在线观看 | 99婷婷狠狠成为人免费视频 | 精品久久久久国产 | 亚洲蜜桃在线 | 天天做天天爱天天综合网 | 久久免费国产精品 | 国产精品亚州 | 久久久久女教师免费一区 | 日韩色中色 | 日韩两性视频 | 日日插日日干 | 狠狠干综合网 | 久久久精品一区二区 | 亚洲精品午夜久久久久久久 | 懂色av一区二区在线播放 | 欧美亚洲一区二区在线 | 国产精品国产三级国产专区53 | 激情婷婷网 | 三级视频日韩 | 精品乱码一区二区三四区 | 日韩性xxxx | 一二区电影 | 日韩国产精品一区 | 超碰在线网| 91亚洲国产成人久久精品网站 | 日韩激情片在线观看 | 久久美女免费视频 | 国产麻豆精品久久 | 国产精品一区二区三区在线播放 | 国产黄在线播放 | 一级性生活片 | 成人a免费 | 久久国产片 | 丁香婷婷综合激情 | 天天干天天插伊人网 | 日韩一级电影在线观看 | 日韩欧美区 | 2019国产精品 | 国内视频在线 | 97香蕉超级碰碰久久免费软件 |