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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

IL入门之旅(三)——Dump对象

發布時間:2025/3/21 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IL入门之旅(三)——Dump对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Dump對象

??? 一個成熟的系統,都少不了一個強大的Log,而Log通常需要把當時的對象的很多信息記錄下來,因此Dump對象的功能在很多場合下都會使用到。

??? 那么來看看普通的Dump如何實現:

public class Foo {public string Bar { get; set; }public int FooBar { get; set; } } Foo foo = new Foo { Bar = "Bar", FooBar = 100, }; Trace.TraceInformation("Foo: Bar=" + foo.Bar + ",FooBar=" + foo.FooBar.ToString());

??? 如此,就把Foo實例的內容記錄到Log中,但是,思考一下,如果有100多個地方需要記錄Foo對象,就需要寫100多遍這樣的代碼嗎?

??? 當然不會這么傻啦,利用擴展方法可以很簡單實現:

public static string Dump(this Foo foo) {return "Foo: Bar=" + foo.Bar + ",FooBar=" + foo.FooBar.ToString(); } Foo foo = new Foo { Bar = "Bar", FooBar = 100, }; Trace.TraceInformation(foo.Dump());

??? 看起來是不是簡單多了,當時,如果有100個不同的類型需要Dump,那么就需要100多個擴展方法,并且需要經常性的維護之間的關系。

??? 別忘了,.net的還有強大的反射,來想想反射如何實現:

public static string Dump(this object obj) {return obj.GetType().Name + ": " + string.Join(",",(from p in obj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)where p.GetGetMethod() != null && p.GetIndexParameters().Length == 0select p.Name + "=" + p.GetValue(obj, null)).ToArray()); }

??? 如此簡單的就打造了一個近乎萬能的Dump方法,不過,別忘了反射的代價:性能。在大多數情況下,使用這種方式的性能損失是可以接受的,但是,如果在一個要求高性能的系統下,這樣的性能損失缺是需要深入思考的問題。

目標制定

??? 于是,本文的核心命題就變成尋找一個高性能的并且統一的Dumper。

??? 當然,限于篇幅,需要做明確要實現的Dump的實現范圍:

  • 僅僅Dump編譯時已知的類型(為了最大限度的利用泛型的性能優勢)
  • 僅僅Dump第一層公開實例屬性(如果支持Nest,會使問題復雜化)
  • 需要支持null
  • 需要支持結構體
  • 需要支持可空類型

準備外殼

??? 那么首先準備一下Dump的外殼:

public static string Dump<T>(this T obj) {var writer = new StringWriter();DumpCore<T>(obj, writer, null);return writer.ToString(); }public static string Dump<T>(this T obj, string separator) {var writer = new StringWriter();DumpCore<T>(obj, writer, separator);return writer.ToString(); }public static void Dump<T>(this T obj, StringBuilder builder) {if (builder == null)throw new ArgumentNullException("builder");DumpCore(obj, new StringWriter(builder), null); }public static void Dump<T>(this T obj, StringBuilder builder, string separator) {if (builder == null)throw new ArgumentNullException("builder");DumpCore(obj, new StringWriter(builder), separator); }public static void Dump<T>(this T obj, TextWriter writer) {if (writer == null)throw new ArgumentNullException("writer");DumpCore(obj, writer, null); }public static void Dump<T>(this T obj, TextWriter writer, string separator) {if (writer == null)throw new ArgumentNullException("writer");DumpCore(obj, writer, separator); }

??? 其中separator是用于連接屬性的分隔符。

??? 所有的Dump方法僅僅檢查一下參數,然后調用DumpCore方法,那么DumpCore方法如何實現哪?

??? 想想還是不太好辦啊,算了再轉嫁一次:

private static void DumpCore<T>(this T obj, TextWriter writer, string separator) {DumperImpl<T>.Action(writer, obj, separator ?? Environment.NewLine); }

??? 現在從DumpCore變成了DumperImpl<T>了,然后這個類型怎么實現哪?

準備內核

??? 現在想想DumperImpl<T>的骨架:

private static class DumperImpl<T> {public readonly static Action<TextWriter, T, string> Action = CreateAction();private static Action<TextWriter, T, string> CreateAction(){throw new NotImplementedException();} }

??? 這里利用靜態構造函數只會運行一次的特性,讓CLR幫助我們做同步。

??? 來看看CreateAction方法的實現,這個方法需要創建一個Action,第一個參數是TextWriter,用于寫入Dump的內容,第二個參數是T,也就是被Dump的對象,第三個參數是separator,用于分割內容屬性。

??? 當然這個Action不可能是現成的,所以需要一個DynamicMethod,于是代碼就變成了這樣:

private static Action<TextWriter, T, string> CreateAction() {DynamicMethod dm = new DynamicMethod(string.Empty, typeof(void),new Type[] { typeof(TextWriter), typeof(T), typeof(string) });var il = dm.GetILGenerator();// string temp;var temp = il.DeclareLocal(typeof(string));ProcessWhenObjIsNull(il);WriteProperties(il, temp);il.Emit(OpCodes.Ret);return (Action<TextWriter, T, string>)dm.CreateDelegate(typeof(Action<TextWriter, T, string>)); }

??? 里面有2個方法需要處理,一個是ProcessWhenObjIsNull,用于處理對象是null的情況,第二個是WriteProperties,用于Dump對象的屬性。

??? 先來看看第一個,不過先想一下,T在什么情況下,obj可以是null:

  • 首先,T是引用類型
  • 其次,T是可空類型

??? 那么,也就是需要對這兩個情況需要添加null檢測。不過,首先定義一個null的輸出值和TextWriter.Write方法:

private const string NullLiterals = "(null)"; private static readonly MethodInfo TextWriter_Write =typeof(TextWriter).GetMethod("Write", new Type[] { typeof(string) });

??? 于是,ProcessWhenObjIsNull的實現就是:

private static void ProcessWhenObjIsNull(ILGenerator il) {if (!typeof(T).IsValueType){// if (obj == null) { writer.Write(NullLiterals); return; }var NotNullLable = il.DefineLabel();il.Emit(OpCodes.Ldarg_1);il.Emit(OpCodes.Brtrue_S, NotNullLable);il.Emit(OpCodes.Ldarg_0);il.Emit(OpCodes.Ldstr, NullLiterals);il.Emit(OpCodes.Callvirt, TextWriter_Write);il.Emit(OpCodes.Ret);il.MarkLabel(NotNullLable);}else if (Nullable.GetUnderlyingType(typeof(T)) != null){// if (obj == null) { writer.Write(NullLiterals); return; }var NotNullLable = il.DefineLabel();il.Emit(OpCodes.Ldarg_1);il.Emit(OpCodes.Box, typeof(T));il.Emit(OpCodes.Brtrue_S, NotNullLable);il.Emit(OpCodes.Ldarg_0);il.Emit(OpCodes.Ldstr, NullLiterals);il.Emit(OpCodes.Callvirt, TextWriter_Write);il.Emit(OpCodes.Ret);il.MarkLabel(NotNullLable);} }

??? 第一個if判斷T是否是值類型,如果不是值類型(即:引用類型)則需要判null,第二個判斷T是否是可空類型,如果是,則需要判null(利用可空類型為null時裝箱值為null的特性)。

??? 剩下一個WriteProperties才是難點,先想想c#怎么寫:

string propName = "Property"; writer.Write(propName + "="); object propValue = obj.Property; string temp; if (propValue != null) {temp = propValue.ToString(); } else {temp = "(null)"; } writer.Write(temp);

??? 可以發現,Dump屬性分成2個部分,一個是寫屬性的名字,另一個是寫屬性的值。對了,別忘了還要寫separator。

??? 于是,方法的實現就是:

private static void WriteProperties(ILGenerator il, LocalBuilder temp) {foreach (var prop in typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance)){if (prop.GetIndexParameters().Length > 0)continue;var getMethod = prop.GetGetMethod();if (getMethod == null)continue;WriteHead(il, prop);var propCompletedLable = il.DefineLabel();WriteValue(il, temp, prop, getMethod, propCompletedLable);il.MarkLabel(propCompletedLable);WriteSeparator(il);} }

??? 然后就是WriteHead(即:屬性名),WriteValue(屬性值),WriteSeparator(分隔符),這3個方法。

??? 其中,WriteHead和WriteSeparator方法比較簡單:

private static void WriteHead(ILGenerator il, PropertyInfo prop) {// writer.Write("%PropertyName%=");il.Emit(OpCodes.Ldarg_0);il.Emit(OpCodes.Ldstr, prop.Name + "=");il.Emit(OpCodes.Callvirt, TextWriter_Write); } private static void WriteSeparator(ILGenerator il) {// writer.Write(separator);il.Emit(OpCodes.Ldarg_0);il.Emit(OpCodes.Ldarg_2);il.Emit(OpCodes.Callvirt, TextWriter_Write); }

??? 但是,WriteValue就比較復雜了,因為T可能是值類型,也可能是引用類型(在IL里面處理有區別),另外,屬性的value同樣有null的情況需要處理,另外有個性能優化,如果屬性的值類型重寫了ToString方法,就不要裝箱后再調用object.ToString。

private static readonly MethodInfo Object_ToString =typeof(object).GetMethod("ToString", Type.EmptyTypes); private static void WriteValue(ILGenerator il, LocalBuilder temp,PropertyInfo prop, MethodInfo getMethod, Label propCompletedLable) {LoadPropertyValue(il, getMethod);var propType = prop.PropertyType;ProcessWhenValueIsNull(il, propType, propCompletedLable);GetValueString(il, propType, temp);WriteValueString(il, temp); }private static void LoadPropertyValue(ILGenerator il, MethodInfo getMethod) {// var value = obj.%Property%;if (typeof(T).IsValueType){il.Emit(OpCodes.Ldarga, 1);il.Emit(OpCodes.Call, getMethod);}else{il.Emit(OpCodes.Ldarg_1);il.Emit(OpCodes.Callvirt, getMethod);} }private static void ProcessWhenValueIsNull(ILGenerator il, Type propType, Label propCompletedLable) {if (!propType.IsValueType){// if (value == null) { writer.Write(NullLiterals); } else ...var NotNullLable = il.DefineLabel();il.Emit(OpCodes.Dup);il.Emit(OpCodes.Brtrue_S, NotNullLable);il.Emit(OpCodes.Pop);il.Emit(OpCodes.Ldarg_0);il.Emit(OpCodes.Ldstr, NullLiterals);il.Emit(OpCodes.Callvirt, TextWriter_Write);il.Emit(OpCodes.Br, propCompletedLable);il.MarkLabel(NotNullLable);}else if (Nullable.GetUnderlyingType(propType) != null){// if (value == null) { writer.Write(NullLiterals); } else ...var NotNullLable = il.DefineLabel();il.Emit(OpCodes.Dup);il.Emit(OpCodes.Box, propType);il.Emit(OpCodes.Brtrue_S, NotNullLable);il.Emit(OpCodes.Pop);il.Emit(OpCodes.Ldarg_0);il.Emit(OpCodes.Ldstr, NullLiterals);il.Emit(OpCodes.Callvirt, TextWriter_Write);il.Emit(OpCodes.Br, propCompletedLable);il.MarkLabel(NotNullLable);} }private static void GetValueString(ILGenerator il, Type propType, LocalBuilder temp) {if (propType.IsValueType){// is override ToString methodvar toStringMethod = propType.GetMethod("ToString",BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly,null, Type.EmptyTypes, null);if (toStringMethod != null){// call ToString without boxing// %PropertyType% x;var x = il.DeclareLocal(propType);// x = value;il.Emit(OpCodes.Stloc, x);// temp = x.ToString();il.Emit(OpCodes.Ldloca, x);il.Emit(OpCodes.Call, toStringMethod);il.Emit(OpCodes.Stloc, temp);}else{// call ToString with boxing// temp = ((object)value).ToString();il.Emit(OpCodes.Box, propType);il.Emit(OpCodes.Callvirt, Object_ToString);il.Emit(OpCodes.Stloc, temp);}}else{// temp = value.ToString();il.Emit(OpCodes.Callvirt, Object_ToString);il.Emit(OpCodes.Stloc, temp);} }private static void WriteValueString(ILGenerator il, LocalBuilder temp) {// writer.Write(temp);il.Emit(OpCodes.Ldarg_0);il.Emit(OpCodes.Ldloc, temp);il.Emit(OpCodes.Callvirt, TextWriter_Write); }

??? 終于,一個高性能的Dumper寫好了,雖然比起純反射版的代碼復雜了很多。不過,性能方面可以提高很多,接下來不妨測試一下吧。

性能測試

??? 為了測試這個高性能的Dumper到底能有多少性能優勢,使用了下面的測試代碼:

Foo foo = new Foo { Bar = "Bar", FooBar = 100, }; const int count = 1000000; Stopwatch sw = Stopwatch.StartNew(); for (int i = 0; i < count; i++) {foo.DumpByReflection(); } Console.WriteLine(sw.ElapsedMilliseconds); sw.Reset(); sw.Start(); for (int i = 0; i < count; i++) {foo.Dump(); }

??? 其中DumpByReflection使用第一節中的純反射方式,來看看運行結果吧:

5795
906

??? 不快嘛,才6倍,為什么哪?再加一個對比測試:

sw.Reset(); sw.Start(); for (int i = 0; i < count; i++) {var temp = "Bar=" + foo.Bar + ", FooBar=" + foo.FooBar.ToString(); } Console.WriteLine(sw.ElapsedMilliseconds);

??? 再看看速度:

5769
892
353

??? 拼字符串本身就用了353ms,難怪速度快不上去了,那么900ms-350ms,那還有450ms用到哪里去了?

??? 不妨再加一個對比測試:

sw.Reset(); sw.Start(); for (int i = 0; i < count; i++) {foo.Dump(TextWriter.Null); } Console.WriteLine(sw.ElapsedMilliseconds);

??? 將內容Dump到TextWriter.Null,這樣就不會有字符串拼接帶來的性能影響,再來看看結果:

5778
894
352
291

??? Dumper本身花費的時間約300ms,Dumper另外使用的150ms在干什么哪?其中包括StringBuilder的擴容,還有StringWriter的包裝的額外代價。

??? 而反射本身花費的時間越5400ms,也就是9倍的時間,而拼接字符串約350ms,占到Dumper的1/3,反射的6%。

匿名類型

??? 之前的類型都是明確定義的類型,如果是匿名類型呢?

var foo = new { Bar = "Bar", FooBar = 100, };

??? 再次運行,就會發現報錯了MethodAccessException,為什么哪?

??? 因為匿名類型被c#編譯器翻譯為內部類型,而DynamicMethod默認是在Assembly之外的,所以,訪問這個類型的方法是受限制的,因此需要修改一下DynamicMethod的聲明:

DynamicMethod dm = new DynamicMethod(string.Empty, typeof(void),new Type[] { typeof(TextWriter), typeof(T), typeof(string) }, typeof(T));

? ? 完成修改后,再跑一下,完全正常了。這個重載和原來的有什么區別哪?最后一個typeof(T)的作用就是把這個動態方法聲明為T類型上的方法,因此,無論T是內部類型還是外部類型,對這個方法本身而言,都是可見的,因此繞過了CLR的檢查。

? ? 最后在來看看性能分析:

19395
889
353
291

??? 除了反射外,性能基本沒變,那么反射為什么會變慢哪?因為,訪問內部類型的方法需要經過安全檢查,這個額外的工作自然拖慢反射的性能。

總結

以上是生活随笔為你收集整理的IL入门之旅(三)——Dump对象的全部內容,希望文章能夠幫你解決所遇到的問題。

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

亚洲国产精品999 | 国产精品毛片久久久久久久 | 日韩av中文字幕在线 | 99精品国产在热久久下载 | 亚洲黄色成人 | 91精品国产高清自在线观看 | 久久久久久久久久国产精品 | 亚洲人在线7777777精品 | 久久激情电影 | 成片人卡1卡2卡3手机免费看 | 国产精品18久久久久久不卡孕妇 | 国产精品自产拍在线观看桃花 | 国产精品18久久久久久不卡孕妇 | 中文字幕人成乱码在线观看 | 久久精品国产精品亚洲 | 一级成人网 | 97视频在线观看网址 | 黄网站色 | 国产第一页福利影院 | 久久久www成人免费毛片麻豆 | 色久综合 | 欧美日韩精品在线一区二区 | av资源免费观看 | 国产婷婷 | 国产精品九色 | 亚洲精品激情 | 国产一级免费av | 日本高清dvd | 黄网站免费久久 | 999抗病毒口服液 | 999男人的天堂 | 国产这里只有精品 | 中文字幕在线免费97 | 久久久久久免费 | 免费高清男女打扑克视频 | 中文字幕在线有码 | 久久国产亚洲视频 | 免费进去里的视频 | 婷婷久久久久 | 亚洲精品黄网站 | 国产第一页精品 | 国产精品一区二区av影院萌芽 | 一区二区三区中文字幕在线 | 成人久久电影 | 一区二区视频欧美 | 色网站在线免费观看 | 欧美在线观看视频一区二区 | 91插插插免费视频 | 久草在线在线精品观看 | 精品伦理一区二区三区 | 日韩欧美在线综合网 | 久久久网址 | 欧美日韩性生活 | 免费亚洲精品 | 国产91精品久久久久久 | 色婷婷精品 | 国产小视频免费在线网址 | 中文av影院 | 日韩欧美国产免费播放 | 色婷婷综合激情 | 国产亚洲精品久久久久久移动网络 | 久久久久久久综合色一本 | 婷婷激情久久 | 久久综合婷婷 | 51精品国自产在线 | 在线国产黄色 | 国产精彩视频 | 九九九九免费视频 | 精品一区二区三区香蕉蜜桃 | 色香蕉在线 | 一级片免费观看视频 | 久久精品国产一区二区三区 | 日韩久久久久久久久久 | 色片网站在线观看 | 四虎影视8848aamm | 午夜色婷婷 | 日韩久久一区 | 欧美大片mv免费 | 亚洲精品在线免费 | 亚洲mv大片欧洲mv大片免费 | 激情深爱.com | 国产成人精品一二三区 | 日韩中文字幕第一页 | 久久久久久欧美二区电影网 | 天天曰视频 | av大片网站| 国产午夜不卡 | 免费在线观看黄色网 | 美女视频黄网站 | 亚洲最新av网站 | 久福利| 精品国产一区二区三区蜜臀 | 久久久免费高清视频 | 91爱爱电影 | 亚洲精品视频www | 免费看一及片 | 最近中文字幕完整视频高清1 | 97福利视频 | 亚洲免费精彩视频 | 国产精品麻豆果冻传媒在线播放 | 国产黄免费 | 日韩午夜小视频 | 缴情综合网五月天 | 综合色中文| 亚洲精品高清一区二区三区四区 | 香蕉网在线播放 | 黄色国产大片 | 亚洲激情在线视频 | 在线观看91精品视频 | av片在线观看 | 国产一级二级av | 黄色大片日本免费大片 | 人人爽人人片 | 色噜噜狠狠狠狠色综合久不 | 99久久精品国产亚洲 | 综合婷婷丁香 | 国产视频精品免费 | 亚洲精品视频在线观看免费 | 五月婷婷综合激情 | 激情久久伊人 | 亚洲精品乱码久久久久久久久久 | 欧美日韩一区二区三区在线免费观看 | 日韩精品一区二区三区高清免费 | av色综合网| 色全色在线资源网 | 粉嫩av一区二区三区入口 | av中文字幕网址 | 欧美 日韩 国产 成人 在线 | 国产精品美女久久久久久2018 | 国产色在线观看 | 久久看片网站 | 亚洲精品乱码久久久久久蜜桃欧美 | 99热99re6国产在线播放 | 亚洲一级二级三级 | 久草青青在线观看 | 国内视频在线 | 91手机电影| 久久看毛片 | 久久成人资源 | 日韩精品一区二区三区电影 | 欧美性性网| 中文在线中文a | 国产在线精品国自产拍影院 | av在线中文 | 亚洲最新视频在线 | 日韩高清www | 97av在线视频 | 亚洲精品系列 | 麻豆视频入口 | 中文字幕在线观看国产 | 亚洲精品一区二区三区四区高清 | 爱av在线网 | 成人在线视频在线观看 | 天天骚夜夜操 | 玖玖在线看 | 亚洲综合射 | 亚洲日本一区二区在线 | 精品国产伦一区二区三区免费 | 久久成人午夜 | 一级一片免费看 | 亚洲国产三级在线 | 欧美狠狠操 | 中文字幕高清免费日韩视频在线 | 日韩在观看线 | 亚洲激情中文 | 在线国产日本 | 最近日韩免费视频 | 日韩欧美在线播放 | 91禁看片 | 免费观看的黄色片 | 久久99国产精品视频 | 久久美女精品 | 欧美特一级片 | 香蕉网在线观看 | 日本aa在线 | 国产高清视频免费在线观看 | 欧美日韩午夜爽爽 | 精品国产视频在线观看 | 91网免费看 | 一区二区三区国产精品 | 久久久www | 91自拍视频在线 | 国产理论一区二区三区 | 成人一区在线观看 | 欧美福利在线播放 | 久热超碰 | 日韩在线视频精品 | 色视频成人在线观看免 | 国产手机在线精品 | 黄网站免费看 | 一区二区激情视频 | 日韩夜夜爽 | 米奇影视7777 | 国产精品一区二区av日韩在线 | av成人免费在线观看 | 国产精品va在线播放 | 免费在线观看av网站 | 69av网| 99久久这里有精品 | 成人黄色毛片 | 美女网站色免费 | 免费视频资源 | 99在线免费视频观看 | 久久久资源 | 免费福利视频网 | 欧美孕交vivoestv另类 | 99久久精品国产一区 | 久久久久久久久久久久久9999 | 久久久色| 午夜精品一区二区三区在线视频 | 91传媒视频在线观看 | 日韩精品最新在线观看 | 少妇bbw搡bbbb搡bbbb | 久色小说| 999久久a精品合区久久久 | 中文在线字幕免 | 亚洲久在线 | 亚洲激情校园春色 | 亚洲高清视频一区二区三区 | 国产综合香蕉五月婷在线 | 五月婷婷久久综合 | 亚洲国产成人久久 | 日日夜夜天天人人 | av福利在线免费观看 | 色婷婷狠狠五月综合天色拍 | 久久草草热国产精品直播 | 日韩资源在线播放 | 91精品婷婷国产综合久久蝌蚪 | 天天操天天干天天操天天干 | 波多野结衣电影一区二区三区 | 日韩欧美视频免费在线观看 | 中文字幕 欧美性 | 日韩成人精品一区二区 | 大型av综合网站 | 亚洲欧美视频一区二区三区 | 亚洲另类人人澡 | 天天色婷婷 | 9在线观看免费高清完整版在线观看明 | 国产一级电影免费观看 | 天天干天天操av | 豆豆色资源网xfplay | 激情图片久久 | 青青草在久久免费久久免费 | 亚洲一区二区三区毛片 | 91精品在线视频观看 | 激情视频免费在线观看 | 亚洲午夜久久久久久久久电影网 | 四虎成人精品永久免费av | 91福利在线观看 | 成人免费观看网站 | 日本午夜在线亚洲.国产 | 欧美日韩久久久 | 天天射天天干天天爽 | 久久精品毛片 | 久热香蕉视频 | 在线a亚洲视频播放在线观看 | 久久99国产精品久久99 | 中文字幕123区 | 天天干天天操天天搞 | 超碰av在线| 亚洲精品一区二区三区新线路 | 天天操天天操天天操天天 | 精品亚洲午夜久久久久91 | 一区在线观看 | 日韩欧美高清免费 | 欧美色噜噜| 国产中文在线观看 | 一区二区三区观看 | 首页中文字幕 | 黄色av免费 | 天天操夜夜想 | 成人黄性视频 | 激情久久久久久久久久久久久久久久 | 成人免费影院 | 欧美视频国产视频 | 久久99久久99精品免观看软件 | 亚洲成人黄色av | 亚洲 欧美 成人 | 日韩特级黄色片 | 久久精品99久久久久久2456 | 99激情网 | 日韩一级电影在线观看 | 国产精品日韩久久久久 | 欧美成人h版电影 | 97视频在线观看播放 | 久久在线 | 伊人久久精品久久亚洲一区 | 久久久久久久久久福利 | 国产黄色片在线免费观看 | 成人精品在线 | 草免费视频 | 久久综合干 | 日韩免费电影在线观看 | 99在线热播精品免费99热 | 奇米影音四色 | 免费a v在线| 亚洲免费激情 | 日日夜夜综合网 | 日韩视频一区二区三区在线播放免费观看 | 日韩美精品视频 | 国产伦理精品一区二区 | 麻豆播放 | 日韩a在线 | av福利在线 | 特级a老妇做爰全过程 | 午夜婷婷网 | 五月激情丁香婷婷 | 国产精品18久久久久白浆 | 美女性爽视频国产免费app | 日韩av影片在线观看 | 91av在线免费 | 久久天堂亚洲 | 久草在线一免费新视频 | 激情综合五月天 | 碰超在线 | 日韩精品视频免费看 | 日韩中文字幕国产精品 | 91在线看网站 | 在线亚洲成人 | 久草在线免费播放 | 国产精品视频在线看 | 337p西西人体大胆瓣开下部 | 欧美一级欧美一级 | 亚洲激情校园春色 | 免费在线看成人av | 久久国产精品久久久久 | 天天摸夜夜操 | 日韩电影在线观看一区二区 | 国产成人久久精品亚洲 | a在线观看国产 | 成人黄色国产 | 成人精品亚洲 | 欧美亚洲精品一区 | 午夜精品久久久久99热app | 色.www | 亚洲综合在线五月天 | 国产精品网红直播 | 97超碰人人模人人人爽人人爱 | 亚洲国产999| 欧美国产在线看 | 黄色一级性片 | 在线观看久久久久久 | 99精品热视频 | 中文字幕在线观看完整 | 日韩电影在线观看一区二区三区 | 国产原创在线 | 黄色三级在线 | 天天草天天操 | 人人干人人做 | 成人综合婷婷国产精品久久免费 | 91高清在线 | 成年人免费在线 | 国产精品久久中文字幕 | 久久高清免费观看 | 久久艹国产视频 | 999成人免费视频 | 在线免费观看的av网站 | 亚洲一区二区三区精品在线观看 | 91视频国产免费 | 99免费视频 | 激情在线网址 | 亚洲精品男女 | 亚洲成人精品在线观看 | 91丨九色丨国产在线 | 久久伊99综合婷婷久久伊 | 久久久久久久久久久网 | 在线观看av网 | 久草在线观看视频免费 | 成人免费视频在线观看 | 日日日操| 国产高清不卡在线 | 婷婷日| 综合色综合 | 992tv又爽又黄的免费视频 | 成年人免费在线观看 | 国产精品九九视频 | 999视频网站 | 永久免费观看视频 | 久久综合精品国产一区二区三区 | 国产区在线看 | a级片在线播放 | 99产精品成人啪免费网站 | 黄色在线成人 | 亚洲少妇久久 | 丁香激情综合 | 久久久久久国产精品免费 | 男女免费av | 黄色福利视频网站 | 99r在线| 在线探花| av中文字幕网站 | 91激情| 日韩xxxxxxxxx | 99久久久国产精品 | 国产又粗又硬又爽视频 | 久久国产精品99久久久久久进口 | 五月天天天操 | 久久久国产精品一区二区中文 | 91人网站| 成人国产精品免费观看 | 欧美天天综合网 | 午夜久久久久久久久 | 国产人成看黄久久久久久久久 | 精品在线看 | 免费看黄色小说的网站 | 一区二区三区高清在线观看 | 天天操夜夜逼 | 久久久久久久久免费视频 | 在线观看成人毛片 | 国产在线综合视频 | 91视频 - x99av| 国产日产欧美在线观看 | 日韩中文字幕免费看 | 国产字幕在线看 | 国产黄色一级片在线 | 亚洲成人免费在线观看 | 日韩视频www | 欧美国产日韩一区 | 精品美女在线观看 | 手机在线欧美 | 国产精品九色 | 91精品国自产在线偷拍蜜桃 | 69视频在线 | 精品欧美一区二区在线观看 | 久久乐九色婷婷综合色狠狠182 | 九九热久久久 | 五月婷激情 | 色多多污污在线观看 | 在线播放一区 | 99草视频在线观看 | 久久久久国产免费免费 | 国产99久久久国产精品免费看 | 国产精品99久久免费黑人 | 青青河边草观看完整版高清 | 久久开心激情 | 毛片网在线观看 | 免费看成人av | 国产精品99免费看 | 欧美一区二区在线免费看 | 在线观看麻豆av | 91成人免费在线 | 欧美最猛性xxxxx免费 | av中文字幕亚洲 | 欧美日韩免费观看一区二区三区 | 成年人视频在线 | 91免费在线看片 | 在线日韩中文 | 亚洲精品videossex少妇 | 九九精品无码 | 精精国产xxxx视频在线播放 | 岛国大片免费视频 | 久操久| 日韩欧美一区二区在线观看 | 久草在线视频中文 | 成人在线观看av | 久久噜噜少妇网站 | 超碰97国产精品人人cao | 欧美精品乱码99久久影院 | 韩国一区视频 | 中文字幕一区二区三区乱码在线 | 亚洲精品视频在线 | 国产精品18久久久久久vr | av电影在线不卡 | 国产成人精品亚洲日本在线观看 | 国产精品乱码久久 | 久久精品播放 | 亚洲黄色免费在线看 | 国产精品videossex国产高清 | 91在线视频观看免费 | 四虎8848免费高清在线观看 | 色综合小说 | 免费精品在线观看 | 国产一区二区在线观看免费 | 在线视频日韩欧美 | 全黄网站 | 天天操天天干天天插 | 欧美福利在线播放 | 一级黄色片在线观看 | 97在线影视 | 九九九热精品免费视频观看网站 | 国产又黄又硬又爽 | 狠狠狠狠狠狠狠狠 | 亚洲精品自拍视频在线观看 | 久久一级电影 | 国产成人黄色av | 亚洲片在线观看 | 国产做aⅴ在线视频播放 | 91成人看片 | 久久不卡日韩美女 | 日女人免费视频 | 欧美整片sss| 精品婷婷 | 久久久九色精品国产一区二区三区 | 亚洲在线国产 | 黄色三级免费观看 | 福利视频入口 | 国产剧情一区二区在线观看 | 亚洲黄色片一级 | 欧美成人h版在线观看 | 日韩欧美在线观看一区二区 | 超碰99在线 | 黄色免费电影网站 | 亚洲闷骚少妇在线观看网站 | 国产精品专区h在线观看 | 婷婷av在线 | 视频二区在线 | 2024国产精品视频 | 国产精品高清在线 | 国产精品成人国产乱 | 福利av影院 | 欧美精品一区二区免费 | 国产精品24小时在线观看 | 国产精品国产三级在线专区 | 玖草影院 | 免费在线观看av网站 | 色狠狠一区二区 | 欧美日韩在线视频一区二区 | 中文字幕亚洲高清 | 最新国产在线视频 | 91视频国产免费 | 日韩av网站在线播放 | 欧美极品xxx | 成人精品视频久久久久 | 日本最新高清不卡中文字幕 | 国模一二三区 | 亚洲激情综合网 | 欧美日韩电影在线播放 | 亚洲黄色免费观看 | www.午夜视频 | 日韩美女久久 | 欧美大片在线看免费观看 | 99精品视频在线看 | 久久久国产精品麻豆 | 99欧美精品 | 久久黄色免费视频 | 成人精品在线 | 久久五月天综合 | 玖玖在线资源 | 波多野结衣亚洲一区二区 | 91精品秘密在线观看 | 永久免费观看视频 | 亚洲黄色高清 | 欧美日韩国产一区二区三区在线观看 | 欧美日韩视频在线观看一区二区 | 天天舔天天搞 | 97超碰国产在线 | 日本久久久影视 | 亚洲综合色激情五月 | 激情av综合 | 99色99| 精品国产一区二区三区四区vr | 日韩免费一二三区 | 毛片美女网站 | 亚洲欧美色婷婷 | 免费三级骚 | 国产午夜麻豆影院在线观看 | 视频国产在线 | 成人少妇影院yyyy | 久久伦理影院 | 激情视频综合网 | 午夜久久影视 | 亚洲天堂网在线视频 | 免费观看的黄色 | 欧美一区,二区 | 午夜骚影 | 免费a视频在线 | av电影不卡 | 一区二区三区高清在线 | 西西44人体做爰大胆视频 | 亚洲激情p | 丁香激情视频 | 久久久精品国产一区二区 | 在线精品视频免费播放 | 亚洲精品美女在线观看播放 | 国产在线探花 | 99 精品 在线 | 99久久精品国产系列 | 国产亚洲精品久久19p | 91精品啪在线观看国产 | 丁香在线观看完整电影视频 | 亚洲视频,欧洲视频 | 欧美成人91 | 国产999精品久久久影片官网 | 在线观看va | 日韩另类在线 | 亚洲国产精品视频 | 日韩v欧美v日本v亚洲v国产v | 正在播放五月婷婷狠狠干 | 国产精品久久久视频 | 亚洲无在线 | 国色天香在线观看 | 视频一区二区免费 | 亚洲国产精品日韩 | 日韩成人欧美 | 亚洲精品影视 | 久久久久一区二区三区 | 久久精品国产美女 | 黄色av一级 | 久久伦理视频 | 国产特级毛片aaaaaa高清 | 黄色一级在线观看 | 久久综合免费视频 | 久久免费精品一区二区三区 | 友田真希x88av | 欧美日韩精品国产 | 日韩欧美在线视频一区二区 | 午夜精品麻豆 | 国产一在线精品一区在线观看 | 99这里精品 | 欧美日韩精品免费观看视频 | 美女黄频视频大全 | www国产在线| 波多野结衣小视频 | 久久精品国产精品亚洲 | 午夜视频亚洲 | 综合久久久久久 | 欧美精品乱码久久久久久按摩 | 96看片| 91尤物国产尤物福利在线播放 | 91精品国产乱码久久桃 | 午夜色性片 | 中文字幕亚洲五码 | 高清免费在线视频 | 蜜臀av性久久久久蜜臀av | 在线一区二区三区 | 成人av免费在线播放 | 欧美日韩99 | 干亚洲少妇 | 久久99国产精品自在自在app | 九九色视频 | 欧美地下肉体性派对 | 成年人免费在线观看网站 | 美女视频黄在线观看 | 黄色片视频在线观看 | 五月天最新网址 | 99高清视频有精品视频 | www.黄色片网站 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 热99在线视频 | 中文成人字幕 | 婷婷在线网站 | 狠狠狠狠狠狠干 | 欧美aaa大片| 玖玖玖国产精品 | 女人高潮特级毛片 | 少妇按摩av | 久久激情视频 | 欧美巨乳波霸 | 午夜视频一区二区三区 | 欧美色图视频一区 | 手机在线看永久av片免费 | a久久久久久 | 成人久久免费 | 成人国产在线 | 国产美女免费视频 | 色婷婷综合久久久久中文字幕1 | 五月婷婷欧美视频 | 亚洲免费国产视频 | 在线观看日韩精品 | 日韩激情在线 | 亚洲国产一区在线观看 | 久久视精品| 91av原创 | 久草视频视频在线播放 | 亚洲狠狠丁香婷婷综合久久久 | 国产经典三级 | 毛片美女网站 | 在线观看国产一区二区 | 国产精品黄色在线观看 | 亚洲精品久久久蜜桃直播 | 在线观看久久 | 亚洲最新av在线 | 激情婷婷综合 | 国产精品 国产精品 | 91麻豆免费视频 | 在线视频亚洲 | 国产福利a | 国产精品美女视频网站 | 日日插日日干 | 久久免费美女视频 | 国产精品久久久久久久久久久杏吧 | 国产免费视频一区二区裸体 | 日韩中文字幕免费 | 国产精品一区二区免费在线观看 | 中文字幕 第二区 | 亚洲成人黄色 | 亚洲一区视频在线播放 | 中文字幕中文字幕在线中文字幕三区 | 久草视频一区 | 成人小视频在线免费观看 | 狠狠色婷婷丁香六月 | 国产流白浆高潮在线观看 | 久久爱www.| 精品久久久久久综合 | 亚洲另类xxxx | 久久大香线蕉app | 日韩久久久久久久久 | 美女性爽视频国产免费app | 成人免费观看大片 | 99热这里是精品 | 中文乱幕日产无线码1区 | 成人av免费看 | 久久久久久久久久网站 | 91亚洲欧美激情 | 91av在线国产| 99欧美精品| 在线观看日韩精品视频 | av在线播放快速免费阴 | 久草电影在线观看 | 免费色视频 | 中文字幕中文字幕在线中文字幕三区 | 国产精品视频在线观看 | 中文字幕在线播放日韩 | 国产精品日韩在线观看 | 免费av网址大全 | 亚洲午夜小视频 | 最新色站 | www.97视频| 国产在线综合视频 | 天天伊人网 | 国产91aaa| 天天色成人 | 天天操比 | 4438全国亚洲精品观看视频 | 国产精品白丝av | 国产精品久久久久一区二区三区共 | 久久精品—区二区三区 | 亚洲精品字幕在线 | 亚洲成人精品影院 | 男女啪啪视屏 | 99视频在线看 | 99精品福利视频 | 日韩成人精品一区二区 | 中文字幕视频网站 | www在线观看国产 | 黄色三级免费看 | 欧美日韩成人一区 | 91一区啪爱嗯打偷拍欧美 | 91香蕉视频 mp4| 国产黄色在线观看 | 色婷婷亚洲综合 | 午夜精品久久久久久久久久久 | 国产精品人人做人人爽人人添 | 成人av网页 | 五月婷婷综合激情网 | 999热视频| 天天干天天操天天搞 | 久久理论影院 | 国产成人一区二区精品非洲 | 国产精品欧美一区二区三区不卡 | 久久久99精品免费观看 | 久久久久久久久久久精 | 亚洲免费公开视频 | 黄色小说视频网站 | 日韩久久精品一区 | 国产精品美女久久久久久久久久久 | 成人性生交大片免费看中文网站 | 国产一级免费观看视频 | www色片| 国产精品二区三区 | 久久成人福利 | 欧美黄色高清 | 日本性动态图 | 色综合色综合久久综合频道88 | 一级黄色在线免费观看 | 69av网| 九九九毛片 | 久久精品这里精品 | 天天射天 | 5月丁香婷婷综合 | 中文永久免费观看 | 91免费版在线观看 | 日本中文字幕免费观看 | 91av蜜桃 | 激情中文字幕 | 欧美一区二区三区特黄 | 国产成人久久av977小说 | 天天要夜夜操 | 日韩中文在线观看 | 国产色秀视频 | 91视频中文字幕 | 亚洲乱码国产乱码精品天美传媒 | 成人av在线网 | 国产探花| 中文字幕日韩国产 | 国产午夜视频在线观看 | 日韩欧美一二三 | 999成人网 | 午夜在线免费观看 | 亚洲精品 在线视频 | 久久久亚洲精品 | 国产精品欧美一区二区三区不卡 | 天天爽天天爽天天爽 | 久久精品国产成人 | 国产日本三级 | 国产永久免费观看 | 久久婷婷综合激情 | 亚洲视频在线观看免费 | 色97在线| 日韩一区精品 | 国产成a人亚洲精v品在线观看 | 婷婷伊人综合亚洲综合网 | 亚洲国产人午在线一二区 | 日韩免费av网址 | 四虎在线影视 | 日本在线中文在线 | 五月激情站 | www.天天色| 视频二区在线视频 | 天天插伊人 | 又长又大又黑又粗欧美 | 久久色在线观看 | 亚洲精品综合在线观看 | 九九热精品视频在线播放 | 91香蕉国产在线观看软件 | 久久狠狠干 | 久久狠狠婷婷 | 国产精品大全 | 免费精品视频在线观看 | 91精品对白一区国产伦 | 欧美日韩免费观看一区=区三区 | 日韩av中文字幕在线免费观看 | 粉嫩一区二区三区粉嫩91 | 色999在线| 国产精品资源在线 | 91手机在线看片 | 久久精品五月 | 伊人伊成久久人综合网站 | 狠狠色伊人亚洲综合网站色 | 日韩成人在线免费观看 | av大全免费在线观看 | 97久久久免费福利网址 | 国产一区精品在线观看 | 国产精品综合久久 | 久久手机免费视频 | av888av.com | av线上免费看 | 在线午夜av | 久草网站在线观看 | 中文字幕乱码日本亚洲一区二区 | 欧美性成人 | 天堂va在线高清一区 | 久久久久www| 久久久久久久久久网站 | 狠狠色丁香婷婷综合久久片 | 亚洲午夜久久久久久久久久久 | 麻豆国产精品一区二区三区 | 日韩激情中文字幕 | 久久人人爽爽 | 国产精品久久久久久久久免费 | 久久久久久久久久电影 | 国产精品99久久久久久小说 | 97国产视频| 中文字幕一区二区三 | 黄色片免费在线 | 伊人资源视频在线 | 中文字幕中文字幕在线一区 | 日本精品xxxx | 黄色不卡av | 免费观看国产精品 | 亚洲精品国产精品乱码在线观看 | 天天干天天干天天 | 色中色资源站 | 国产精品永久免费 | 999国内精品永久免费视频 | 伊人国产在线播放 | 草久在线观看视频 | 中文字幕不卡在线88 | 中文字幕一二三区 | 99国产成+人+综合+亚洲 欧美 | 69av视频在线观看 | 91av电影在线 | 精品视频免费看 | 91视频免费看片 | 一区二区 久久 | 日韩欧美一区二区在线播放 | 一级黄色片在线 | 色婷婷在线观看视频 | 欧美在一区 | 天天摸天天操天天舔 | 国产一区二区三区在线 | 日本天天色 | 精品国产乱码久久久久久1区2匹 | 午夜精品一区二区三区在线 | 在线观看的av网站 | 国产精品成人国产乱一区 | 国产精品一区二区白浆 | 免费在线国产视频 | 久久超碰免费 | 国产最新在线 | 日韩网站在线播放 | 九七视频在线观看 | 久久免费激情视频 | 国产美女被啪进深处喷白浆视频 | 午夜久久影视 | 亚洲精品国偷自产在线99热 | 久久综合五月天婷婷伊人 | 在线va网站 | 狠狠躁夜夜躁人人爽超碰91 | www.色爱 | 日日夜夜国产 | 极品久久久久久久 | 超碰在线天天 | 欧美中文字幕第一页 | 国产字幕在线播放 | 色婷婷电影 | 日日射天天射 | 亚洲高清久久久 | bbw av| 麻花豆传媒一二三产区 | 日韩精品视频免费专区在线播放 | 久久国产系列 | 国产美腿白丝袜足在线av | 国产精品久久久久久久久久不蜜月 | 免费黄色在线网站 | 黄色片网站| 亚洲午夜久久久影院 | 看污网站 | 国产精品地址 | 亚洲精品字幕 | 国产91av视频在线观看 | 亚洲www天堂com| av中文字幕第一页 | 成人h电影在线观看 | 999热线在线观看 | 欧美国产日韩一区二区三区 | 欧美日本不卡高清 | 国产剧情久久 | 97视频在线免费 | 国产亚洲在线视频 | 欧美淫视频| 色综合久久综合 | 国产一级视频 | 国产.精品.日韩.另类.中文.在线.播放 | 蜜臀av夜夜澡人人爽人人桃色 | 精品国产一区二区三区久久影院 | 西西444www| 高清av中文字幕 | 高清不卡免费视频 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 日韩电影黄色 | 在线直播av | 国产精品九九九 | 天天综合区 | 黄p在线播放 | 国产综合在线观看视频 | 欧洲色吧| 久久婷婷激情 | 国产不卡免费av | 又黄又网站 | www.色午夜 | 色综合久久综合中文综合网 | 久久精品人人做人人综合老师 | 亚洲免费a | 91免费视频网站在线观看 | 亚洲一级在线观看 | 伊人va| 中文字幕 国产视频 | 一区二区三区免费网站 | 免费婷婷| 综合色久 | 久久久久久久久久久免费 | 欧美精品免费在线 | 91一区二区三区在线观看 | 久久艹免费 | 在线观看日本韩国电影 | 亚洲精品91天天久久人人 | 国产专区一 | 国产精品久久久久久久久久 | 国产又黄又爽无遮挡 | 99久久精品国产欧美主题曲 | 中文字幕 国产专区 | 久草在线视频新 | 1024手机在线看 | 亚洲 成人 一区 | 99精品视频在线观看 | 国产精品免费在线观看视频 | 天天草天天摸 | 欧美日韩精品在线视频 | 在线观看色网 | 91看片网址 | 99这里都是精品 | 成 人 a v天堂 | 综合久久久久 | 人人插人人做 | 久久久久久久久网站 | 成人av网站在线观看 | 国产原创中文在线 | 日韩精品一区二区在线观看 | 欧美国产亚洲精品久久久8v | 亚洲精品麻豆 | 视频在线一区二区三区 | 亚洲精品乱码久久久久久蜜桃动漫 | 色在线最新 | 日本系列中文字幕 | 中文在线免费一区三区 | 亚洲第一成网站 | 欧美一二三区播放 |