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

各大主流.Net的IOC框架性能測試比較

開發 后端
我簡單介紹過Autofac的使用,有人希望能有個性能上的測試,考慮到有那么多的IOC框架,而主流的有:Castle Windsor、微軟企業庫中的Unity、Spring.NET、StructureMap、Ninject等等。本篇文章主要針對這些IOC框架編寫測試程序。

我簡單介紹過Autofac的使用,有人希望能有個性能上的測試,考慮到有那么多的IOC框架,而主流的有:Castle Windsor、微軟企業庫中的Unity、Spring.NET、StructureMap、Ninject等等。本篇文章主要針對這些IOC框架編寫測試程序。

Autofac下載地址:http://code.google.com/p/autofac/

Castle Windsor下載地址:http://sourceforge.net/projects/castleproject/files/Windsor/2.5/Castle.Windsor.2.5.3.zip/download

Unity下載地址:http://entlib.codeplex.com/

Spring.NET下載地址:http://www.springframework.net/

StructureMap下載地址:http://sourceforge.net/projects/structuremap/files/

Ninject下載地址:http://ninject.org/download

其中,測試程序均采用***的類庫。

基礎工作

1、程序還是引用上一篇的示例作為測試背景。

2、編寫一個性能計數器,這里我采用老趙寫的一個CodeTimer的類,具體介紹見:http://www.cnblogs.com/JeffreyZhao/archive/2009/03/10/codetimer.html

使用方式類似于:

  1. int iteration = 100 * 1000;string s = "";   
  2. CodeTimer.Time("String Concat", iteration, () => { s += "a"; });   
  3. StringBuilder sb = new StringBuilder();   
  4. CodeTimer.Time("StringBuilder", iteration, () => { sb.Append("a"); }); 

3、編寫一個IRunner運行接口:

  1. public interface IRunner   
  2. {   
  3.     void Start(RunType runType);   

以及RunnerBase抽象基礎運行類:

  1. public abstract class RunnerBase   
  2. {   
  3.     private int _iteration = Convert.ToInt32(System.Configuration.ConfigurationSettings.AppSettings["Iteration"] ?? "10000");   
  4.     internal int Iteration   
  5.     {   
  6.         get { return _iteration; }   
  7.     }  
  8.     internal void Time(Action action)   
  9.     {   
  10.         CodeTimer.Time(Name, Iteration, action);   
  11.     }  
  12.     protected abstract string Name { get; }   
  13. }  

這里_iteration表示測試運行次數,通過配置文件來設置值。Time方法通過計數器對action方法進行Iteration次迭代。

編寫一個RunManager的運行管理器:

  1. public class RunManager   
  2. {   
  3.     public static void Start(IRunner runner)   
  4.     {   
  5.         Start(runner, RunType.Transient);   
  6.     }  
  7.  
  8.     public static void Start(IRunner runner, RunType runType)   
  9.     {   
  10.         runner.Start(runType);   
  11.     }   

在測試中,我采用兩種方式的性能比較,一個是單例狀態,一個是非單例狀態:

  1. /// <summary>   
  2. /// 運行狀態   
  3. /// </summary>   
  4. public enum RunType   
  5. {   
  6.     /// <summary>   
  7.     /// 單例   
  8.     /// </summary>   
  9.     Singleton,  
  10.  
  11.     /// <summary>   
  12.     /// 瞬時   
  13.     /// </summary>   
  14.     Transient   
  15. }  

好了,現在我的程序只要繼承RunnerBase以及IRunnre接口,就可以實現各個IOC框架的初始化裝配的工作了?;A工作已經做好。

#p#

各個IOC框架測試程序

1、Autofac:

  1. public class AutofacRunner : RunnerBase, IRunner   
  2. {   
  3.     protected override string Name   
  4.     {   
  5.         get { return "Autofac"; }   
  6.     }  
  7.  
  8.     public void Start(RunType runType)   
  9.     {   
  10.         var builder = new ContainerBuilder();  
  11.  
  12.         //if (runType == RunType.Singleton)   
  13.         //    builder.RegisterType<DatabaseManager>().SingleInstance();   
  14.         //else   
  15.         //    builder.RegisterType<DatabaseManager>();   
  16.         //builder.RegisterType<SqlDatabase>().As<IDatabase>();   
  17.         ////builder.RegisterModule(new ConfigurationSettingsReader("autofac"));  
  18.  
  19.         builder.RegisterType<SqlDatabase>().As<IDatabase>();   
  20.         if (runType == RunType.Singleton)   
  21.             builder.Register(c => new DatabaseManager(c.Resolve<IDatabase>())).SingleInstance();   
  22.         else   
  23.             builder.Register(c => new DatabaseManager(c.Resolve<IDatabase>()));    
  24.  
  25.         var container = builder.Build();  
  26.  
  27.         Time(() =>   
  28.         {   
  29.             var manager = container.Resolve<DatabaseManager>();   
  30.             manager.Search("SELECT * FROM USER");   
  31.         });  
  32.  
  33.         container.Dispose();   
  34.     }   
  35. }  

2、Castle Windsor:

  1. public class WindsorRunner : RunnerBase, IRunner   
  2. {   
  3.     protected override string Name   
  4.     {   
  5.         get { return "Castle Windsor"; }   
  6.     }  
  7.  
  8.     public void Start(RunType runType)   
  9.     {   
  10.         var container = new WindsorContainer();   
  11.         if(runType == RunType.Singleton)   
  12.             container.Register(Component.For(typeof(DatabaseManager)).LifeStyle.Singleton);   
  13.         else   
  14.             container.Register(Component.For(typeof(DatabaseManager)).LifeStyle.Transient);  
  15.  
  16.         container.Register(Component.For(typeof(IDatabase)).ImplementedBy(typeof(SqlDatabase)));  
  17.  
  18.         Time(() =>   
  19.         {   
  20.             var manager = container.Resolve<DatabaseManager>();   
  21.             manager.Search("SELECT * FROM USER");   
  22.         });   
  23.     }   
  24. }  

3、Unity:

  1. public class UnityRunner : RunnerBase, IRunner   
  2. {   
  3.     protected override string Name   
  4.     {   
  5.         get { return "Unity"; }   
  6.     }  
  7.  
  8.     public void Start(RunType runType)   
  9.     {   
  10.         var container = new UnityContainer();   
  11.         if(runType == RunType.Singleton)   
  12.             container.RegisterType<DatabaseManager>(new ContainerControlledLifetimeManager());   
  13.         else   
  14.             container.RegisterType<DatabaseManager>(new TransientLifetimeManager());   
  15.         container.RegisterType<IDatabase, SqlDatabase>();  
  16.  
  17.         Time(() =>   
  18.             {   
  19.                 var manager = container.Resolve<DatabaseManager>();   
  20.                 manager.Search("SELECT * FROM USER");   
  21.             });   
  22.     }   
  23. }  

4、Spring.NET:

  1. public class SpringRunner : RunnerBase, IRunner   
  2. {   
  3.     protected override string Name   
  4.     {   
  5.         get { return "Spring.NET"; }   
  6.     }  
  7.  
  8.     public void Start(RunType runType)   
  9.     {   
  10.         string databaseManagerName;   
  11.         if (runType == RunType.Singleton)   
  12.             databaseManagerName = "DatabaseManager_Singleton";   
  13.         else   
  14.             databaseManagerName = "DatabaseManager_Transient";  
  15.  
  16.         Time(() =>   
  17.         {   
  18.             IApplicationContext context = ContextRegistry.GetContext();   
  19.             var manager = (DatabaseManager)context.GetObject(databaseManagerName);   
  20.             manager.Search("SELECT * FROM USER");   
  21.         });   
  22.     }   
  23. }  

5、StructureMap:

  1. public class StructureMapRunner : RunnerBase, IRunner   
  2. {   
  3.     protected override string Name   
  4.     {   
  5.         get { return "StructureMap"; }   
  6.     }  
  7.  
  8.     public void Start(RunType runType)   
  9.     {   
  10.         ObjectFactory.Initialize(container =>   
  11.         {   
  12.             if (runType == RunType.Singleton)   
  13.                 container.ForRequestedType<DatabaseManager>().Singleton();   
  14.             else   
  15.                 container.ForRequestedType<DatabaseManager>();   
  16.             container.ForRequestedType<IDatabase>().TheDefaultIsConcreteType<SqlDatabase>();   
  17.         });  
  18.  
  19.         Time(() =>   
  20.             {   
  21.                 var manager = ObjectFactory.GetInstance<DatabaseManager>();   
  22.                 manager.Search("SELECT * FROM USER");   
  23.             });   
  24.     }   
  25. }  

6、Ninject:

  1. public class NinjectRunner : RunnerBase, IRunner   
  2. {   
  3.     protected override string Name   
  4.     {   
  5.         get { return "Ninject"; }   
  6.     }  
  7.  
  8.     public void Start(RunType runType)   
  9.     {   
  10.         IKernel kernel = new StandardKernel(new MyNinjectModule(runType));  
  11.  
  12.         Time(() =>   
  13.         {   
  14.             var manager = kernel.Get<DatabaseManager>();   
  15.             manager.Search("SELECT * FROM USER");   
  16.         });   
  17.     }   
  18. }  

客戶端測試程序

  1. static void Main(string[] args)   
  2. {   
  3.     CodeTimer.Initialize();  
  4.  
  5.     Console.WriteLine("IOC - Singleton");   
  6.     // Autofac Singleton   
  7.     RunManager.Start(new AutofacRunner(), RunType.Singleton);          
  8.     // Castle Windsor   
  9.     RunManager.Start(new WindsorRunner(), RunType.Singleton);   
  10.     // Unity   
  11.     RunManager.Start(new UnityRunner(), RunType.Singleton);   
  12.     // Spring.NET   
  13.     RunManager.Start(new SpringRunner(), RunType.Singleton);   
  14.     // StructureMap   
  15.     RunManager.Start(new StructureMapRunner(), RunType.Singleton);   
  16.     // Ninject   
  17.     RunManager.Start(new NinjectRunner(), RunType.Singleton);  
  18.  
  19.     Console.WriteLine("===================================");   
  20.     Console.WriteLine("IOC - Transient");   
  21.     // Autofac Singleton   
  22.     RunManager.Start(new AutofacRunner(), RunType.Transient);   
  23.     // Castle Windsor   
  24.     RunManager.Start(new WindsorRunner(), RunType.Transient);   
  25.     // Unity   
  26.     RunManager.Start(new UnityRunner(), RunType.Transient);   
  27.     // Spring.NET   
  28.     RunManager.Start(new SpringRunner(), RunType.Transient);   
  29.     // StructureMap   
  30.     RunManager.Start(new StructureMapRunner(), RunType.Transient);   
  31.     // Ninject   
  32.     RunManager.Start(new NinjectRunner(), RunType.Transient);  
  33.  
  34.     Console.ReadKey();   
  35. }  

通過修改App.config的Iteration配置值,來設置迭代次數。

  1. <appSettings>   
  2.   <add key="Iteration" value="100000" />   
  3. </appSettings>  

 

運行結果

1、Iteration=1000:

 

image

 

分析:在千數量級時,Autofac,CastleWindsor、StructureMap基本差不多,效率上比其他的要高。

2、Iteration=10000:

 

image

 

分析:在萬數量級時,Autofac,CastleWindsor,StructureMap基本效率還是差不多,其中StructureMap效率稍稍有些下降;Spring.NET以及Ninject的性能比較低。

3、Iteration=100000:

 

image

 

分析:在十萬數量級時,CastleWindsor的效率開始下降,而在Transient方面,StructureMap和Autofac基本差不多。

4、Iteration=1000000:

 

image

 

分析:在百萬數量級時,Autofac和StructureMap兩者還是保持比較高的效率,并且在Transient方面,StructureMap已經超過了Autofac。

總結:從測試中,可以看出Autofac和StructureMap在性能上面還是體現出比較大的優勢,Ninject可以說性能上較低。而Spring.NET不僅僅專注于IOC方面,它還專注于其他方方面面的功能,所以在IOC方面的性能不是太高。另外,微軟的Unity中規中矩,性能較為穩定,也是一個不錯的選擇。另外,可能測試程序會有所偏差,希望大家也能夠指出問題!

測試程序源代碼:IOCPerformanceTest.rar

原文:http://www.cnblogs.com/liping13599168/archive/2011/07/17/2108734.html

【編輯推薦】

  1. 淺議對.NET第三方控件的一些認識
  2. 五理由 .NET開發者應該關注HTML 5
  3. 微軟的沉默 .NET開發者傷不起
  4. 漫談C#開發中的ASP.NET頁生命周期
  5. 紀念VB.NET君
責任編輯:陳貽新 來源: Leepy的博客
相關推薦

2020-12-23 15:42:42

大數據大數據技術大數據框架

2016-12-07 10:42:57

排序算法實例

2013-02-19 13:23:03

MySQL部署Linux平臺

2011-04-15 10:26:38

JavaMVC

2021-11-28 08:04:27

.Net性能測試

2009-11-25 09:54:20

無線路由傳輸

2012-03-28 16:24:12

開源協議比較

2023-08-30 13:22:00

測試框架工具

2009-01-07 18:27:52

2025-01-06 06:10:00

開源.NEThttps://mp

2024-01-04 08:43:50

Autofac容器.NET

2013-07-11 11:13:51

編輯器

2021-08-11 05:06:23

NETJSON框架

2010-02-01 17:09:16

千兆接入交換機

2024-12-27 10:20:54

2012-07-31 09:02:49

Apworks

2012-12-18 13:32:45

IBMdW

2024-05-11 11:18:21

Kafka監控框架

2023-03-14 08:03:37

Web框架JavaScript

2009-04-14 10:11:29

.NETWeb測試工具
點贊
收藏

51CTO技術棧公眾號

中文字幕一区综合| 99精品热6080yy久久| 日本麻豆一区二区三区视频| 6080国产精品一区二区| 45www国产精品网站| 在线观看岛国av| 色猫av在线| 97视频一区| 国产精品乱子久久久久| 欧美做受高潮电影o| 免费观看污网站| 黄色精品在线观看| 日本不卡不码高清免费观看| 久青草国产97香蕉在线视频| 91精品999| 高清av在线| 久久xxxx精品视频| 精品视频在线观看日韩| 国产综合中文字幕| 高h调教冰块play男男双性文| 五月婷婷亚洲| 91麻豆精品久久久久蜜臀| 日本福利视频一区| 尤物网址在线观看| 久久国产婷婷国产香蕉| 日韩中文字幕网| 亚洲 激情 在线| 91女主播在线观看| 久久激情五月婷婷| 国产91精品视频在线观看| 天海翼在线视频| 国产美女视频一区二区| 亚洲同性gay激情无套| 91精品视频免费| www欧美com| 午夜久久av| 亚洲电影一区二区| 久久伊人一区| 少妇又紧又色又爽又刺激视频 | 欧美中文字幕精品| 久久av红桃一区二区禁漫| 一本色道久久综合狠狠躁的番外| 无码av免费一区二区三区试看 | 国产视频一区二区三区四区五区| 999成人网| 欧美一级淫片007| bt天堂新版中文在线地址| 高清国产mv在线观看| 理论电影国产精品| 国产精品国产亚洲伊人久久 | 国产有码在线观看| 五月激情综合| 自拍视频国产精品| 亚洲成人av免费观看| 色yeye免费人成网站在线观看| 懂色av一区二区夜夜嗨| 久久色精品视频| 久久久国产精品久久久| 男人天堂视频在线观看| 亚洲国产精品黑人久久久| 成人午夜黄色影院| 日本视频www| 欧美一级淫片| 日韩欧美黄色影院| 92看片淫黄大片一级| 欧美jizz18hd性欧美| 成人a区在线观看| 国产精品xxx视频| 欧美一区免费看| 综合久久一区| 亚洲欧洲日韩国产| 亚洲丝袜在线观看| 亚洲精品一区国产| 欧美日韩在线精品一区二区三区激情| 亚洲精品天堂成人片av在线播放| 青草久久伊人| 国产亚洲午夜高清国产拍精品| 亚洲free嫩bbb| 国产黄网在线观看| 日韩专区在线视频| 久久久久久美女| 日本裸体美女视频| 妖精视频一区二区三区| 亚洲欧美国产制服动漫| 欧美一区二区三区影院| 超碰成人福利| 亚洲欧美日韩一区二区在线| 少妇视频在线播放| 自拍自偷一区二区三区| 一本大道亚洲视频| 欲求不满的岳中文字幕| 另类视频一区二区三区| 欧美综合色免费| 大j8黑人w巨大888a片| 2020国产在线视频| 国产精品精品国产色婷婷| 日韩国产精品一区二区三区| 天天干天天爽天天操| 国产高清成人在线| 成人午夜在线观看| 空姐吹箫视频大全| 国产偷v国产偷v亚洲高清| 国产精品99久久久久久大便| 69久久久久| 亚洲精品欧美综合四区| 欧美少妇一级片| www在线观看黄色| 亚洲国产裸拍裸体视频在线观看乱了 | 高清一区二区三区日本久| 人人澡人人澡人人看| 国产videos久久| 精品视频久久久| 欧美色视频一区二区三区在线观看| 在线日韩电影| 久久久久国产视频| 懂色av蜜臀av粉嫩av喷吹| 国产91在线观看丝袜| 欧美日韩在线精品| 男人的天堂在线| 久久久精品一品道一区| 蜜桃传媒视频第一区入口在线看| 男人影院在线观看| 色哟哟一区二区在线观看| 黄色片久久久久| 视频一区视频二区欧美| 在线a欧美视频| 999这里只有精品| 亚洲欧美日韩专区| 日韩av免费在线观看| 亚洲成人av影片| 日韩二区三区四区| 国产日韩一区欧美| 欧美色18zzzzxxxxx| 亚洲综合丝袜美腿| 国产九九九九九| 日本免费一区二区六区| 日韩欧美一二三区| 国产suv精品一区二区68| 日韩福利电影在线观看| 欧美成人免费在线| 国产在线精彩视频| 亚洲精品一区二区精华| 久久精品一区二区免费播放| 日韩大片在线观看| 久热精品视频在线观看| 伊人成人在线观看| 国产成人综合亚洲91猫咪| 亚洲午夜精品福利| 狂野欧美性猛交xxxxx视频| 欧美日韩黄色大片| 伊人国产在线视频| 欧美日韩在线网站| 欧美成人精品在线| 国产成人精品一区二三区| 国产98色在线|日韩| 国产av熟女一区二区三区| 欧美成人精品一级| 欧美巨猛xxxx猛交黑人97人| 国产精品免费精品一区| 99精品国产热久久91蜜凸| 亚洲国内在线| av小说在线播放| 欧美丝袜自拍制服另类| 色综合久久久无码中文字幕波多 | 成人精品水蜜桃| 天堂av在线免费观看| 国产精品久久久久aaaa| 国内av一区二区| 午夜日韩激情| 国产精品免费观看在线| 日韩性xxxx| 国产精品入口麻豆九色| 伊人国产在线视频| 午夜日韩激情| 激情小说网站亚洲综合网| 国产一二三区在线观看| 91精品国模一区二区三区| 免费中文字幕视频| 麻豆成人综合网| 青春草在线视频免费观看| 欧美大片91| 38少妇精品导航| 91精彩视频在线播放| 91精品国产美女浴室洗澡无遮挡| 久久久久久久久久99| 韩国一区二区三区| 日本在线观看一区二区| 亚洲网站免费| 亚洲欧美精品在线| 在线观看国产精品入口男同| 91美女视频网站| 黄色一级片黄色| 思热99re视热频这里只精品| 欧美激情小视频| 深夜福利在线视频| 欧美精品第1页| 特黄一区二区三区| 风间由美一区二区三区在线观看| 国产福利视频在线播放| 亚洲国产精品91| 国产在线98福利播放视频| 青青草在线播放| 欧美精品色一区二区三区| 日韩av综合在线| 中文字幕一区三区| 国产国语性生话播放| 亚洲人妖在线| 中文字幕一区综合| 亚洲图区在线| 超碰97人人人人人蜜桃| 四虎影视4hu4虎成人| 亚洲精品影视在线观看| 国产情侣一区二区| 91搞黄在线观看| 鲁丝一区二区三区| 日韩国产精品久久久久久亚洲| 男女h黄动漫啪啪无遮挡软件| 婷婷久久综合九色综合99蜜桃| 中文字幕欧美日韩| 日韩在线一区二区三区四区| 欧美日韩国产高清一区二区| 日本少妇aaa| 91麻豆国产自产在线观看| 天天爽夜夜爽视频| 蜜桃av噜噜一区| 亚洲自拍偷拍一区二区三区| 少妇精品久久久一区二区| 国产99视频在线观看| 美女91在线| 久久亚洲精品一区二区| 成人在线观看黄色| 6080午夜不卡| 亚洲一级av毛片| 91福利视频在线| 国产又黄又猛又粗又爽| 国产欧美日韩视频在线观看| 午夜剧场高清版免费观看| 噜噜噜91成人网| 欧美 日韩 亚洲 一区| 欧美精品自拍| 国产在线一区二| 亚洲日本va| 91视频免费网站| 只有精品亚洲| 91精品久久久久久久久青青| 8av国产精品爽爽ⅴa在线观看| 日韩在线视频线视频免费网站| 国产99视频在线| 精品久久久免费| 日韩高清免费av| 香蕉影视欧美成人| 99久久99久久精品免费看小说.| 国产在线精品一区二区夜色| 欧美又粗又长又爽做受| 国产尤物久久久| 欧美日韩中文国产一区发布| 男男gay无套免费视频欧美| 久久亚洲高清| 欧美精美视频| 婷婷久久五月天| 爱高潮www亚洲精品| 成人动漫在线观看视频| 国产+成+人+亚洲欧洲在线| 国产精品成人v| 色猫猫成人app| 91精品久久久久| 欧美经典一区| 国产日韩欧美亚洲一区| 欧美男gay| 亚洲国产午夜伦理片大全在线观看网站 | 久久国产精品毛片| 国产成人综合一区| 欧美视频在线观看| 国产一区二区四区| 小嫩嫩精品导航| youjizzxxxx18| 99精品国产在热久久| 日韩久久一级片| 免费观看一级特黄欧美大片| 香蕉视频xxx| av在线综合网| 99热这里只有精品2| 成人动漫一区二区三区| 最新中文字幕视频| 中文字幕在线观看一区| 妺妺窝人体色www婷婷| 色综合久久天天综合网| 国产精品久久久久久久一区二区| 日本黄色一区二区| 国产精品久久久久精| 亚洲精品国产精品国自产观看浪潮| 国产一区二区在线播放视频| 精品999在线播放| 国产尤物视频在线| 日韩精品在线免费观看视频| 北条麻妃在线| 久久免费精品日本久久中文字幕| 女生影院久久| 欧美亚洲国产日韩2020| 国产亚洲人成a在线v网站| 日韩av免费在线| 精品网站999| 欧美高清一区二区| 中文字幕一区二区三区乱码图片| 97xxxxx| 国产很黄免费观看久久| 亚洲天堂视频一区| 久久女同精品一区二区| 黄色在线观看av| 亚洲欧美二区三区| 99re这里只有精品在线| 精品乱人伦一区二区三区| 国产成人久久精品77777综合 | 国产亚洲在线| 欧美 日韩 亚洲 一区| 黄页网站大全一区二区| 成年人在线观看av| 一区二区三区精密机械公司| 黄色污污视频软件| 欧美日韩情趣电影| 手机看片福利在线观看| 欧美精品videofree1080p| 欧美高清影院| 日韩av一区二区三区在线观看| 亚洲福利专区| 97干在线视频| 麻豆精品一区二区综合av| 国产精品九九九九九| 亚洲自拍偷拍图区| 国产偷拍一区二区| 色系列之999| 日本韩国欧美| 免费成人深夜夜行视频| 亚洲少妇诱惑| 欧亚乱熟女一区二区在线| 久久色.com| 日韩欧美亚洲视频| 色欧美片视频在线观看| 手机看片一区二区三区| 欧美激情欧美激情在线五月| 欧美少妇网站| 国产精品久久精品国产| 一区三区在线欧| 波多野结衣之无限发射| 国产99久久久国产精品潘金网站| 丝袜美腿小色网| 欧美二区三区91| 韩国av网站在线| 成人xxxx视频| 99精品综合| 91亚洲精品久久久蜜桃借种| 国产精品精品国产色婷婷| 91tv国产成人福利| 久久精品亚洲精品| 精品一区二区三区中文字幕视频| 精品国产无码在线| 国产精品综合一区二区三区| 日本一区二区三区网站| 婷婷丁香久久五月婷婷| 天堂在线中文资源| 日本精品视频在线| 欧美精品色图| 天天干天天操天天做| 1000部国产精品成人观看| 日韩毛片在线视频| 日韩av资源在线播放| 国产视频在线播放| 91久久国产综合久久蜜月精品| 一区二区小说| 亚洲第一中文av| 99久久久无码国产精品| 毛片视频网站在线观看| 亚洲欧美日韩视频一区| 日本国产亚洲| 日韩成人三级视频| 久久久精品国产99久久精品芒果| 国产乱码77777777| 久久久国产精品视频| 国产成人夜色高潮福利影视| aa免费在线观看| 亚洲色图制服丝袜| 日韩一区二区三区在线观看视频 | 成人精品高清在线视频| 一区二区三区四区免费视频| 国产成人免费视频网站高清观看视频| 日本一区二区三区免费视频| 亚洲午夜av久久乱码| 99riav视频在线观看| 久久香蕉综合色| 久草精品在线观看| 1024在线看片| 日韩一级大片在线| 免费黄色电影在线观看| 高清国产在线一区| 欧美精品日韩| 色婷婷在线影院| 日韩欧美www| **在线精品| 国产精品日韩二区| 日韩电影在线观看一区|