c# – CTP5 EF Code First vs. Linq-to-sql
发布时间:2020-12-15 21:15:48 所属栏目:百科 来源:网络整理
导读:好吧,我知道我必须在这里做错事,因为我得到的表现时间是如此不同,令人震惊.我一直在考虑在我现有的项目中使用实体的代码优先选项,所以我一直在尝试进行一些性能测试,看它是如何比较的.我正在使用MSpec对远程开发数据库运行测试. 这是我的测试: public class
好吧,我知道我必须在这里做错事,因为我得到的表现时间是如此不同,令人震惊.我一直在考虑在我现有的项目中使用实体的代码优先选项,所以我一直在尝试进行一些性能测试,看它是如何比较的.我正在使用MSpec对远程开发数据库运行测试.
这是我的测试: public class query_a_database_for_a_network_entry_with_linq : ipmanagement_object { protected static NetINFO.IPM_NetworkMaster result; Because of = () => { var db = new NetINFODataContext(); result = db.IPM_NetworkMasters.SingleOrDefault(c => c.NetworkID == 170553); }; It should_return_an_ipm_networkmaster_object = () => { result.ShouldBeOfType(typeof(NetINFO.IPM_NetworkMaster)); }; It should_return_a_net_ou_object_with_a_networkid_of_4663 = () => { result.IPM_OUIDMaps.First().NET_OU.NET_OUID.ShouldEqual(4663); }; } public class query_a_database_for_a_network_entry_with_entity_code_first : ipmanagement_object { protected static NetInfo.Core.Models.CTP.IPM_NetworkMaster result; Because of = () => { NetInfo.Core.Models.CTP.NetInfoDb db = new NetInfo.Core.Models.CTP.NetInfoDb(); result = db.IPM_NetworkMasters.SingleOrDefault(c => c.NetworkID == 170553); }; It should_return_an_ipm_networkmaster_object = () => { result.ShouldBeOfType(typeof(NetInfo.Core.Models.CTP.IPM_NetworkMaster)); }; It should_return_a_net_ou_object_with_a_networkid_of_4663 = () => { result.NET_OUs.First().NET_OUID.ShouldEqual(4663); }; } 正如您从datacontext中看到的linq-to-sql我无法直接访问具有多对多关系的对象.我必须使用中间查找表.这是我喜欢的Entity框架之一.但是,当我运行这些测试时,linq测试永远不会超过4秒完成(数据库是远程的).实体测试每次耗时近8秒.不确定为什么会有这么大的差异?以下是我的POCO类和我的dbcontext的摘录: 的DbContext: public class NetInfoDb : DbContext { public NetInfoDb() : base("NetINFOConnectionString") { } public DbSet<IPM_NetworkMaster> IPM_NetworkMasters { get; set; } public DbSet<IPM_NetworkType> IPM_NetworkTypes { get; set; } public DbSet<NET_OU> NET_OUs { get; set; } protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) { modelBuilder.Entity<IPM_NetworkMaster>() .HasMany(a => a.NET_OUs) .WithMany(b => b.IPM_NetworkMasters) .Map(m => { m.MapRightKey(a => a.NET_OUID,"NET_OUID"); m.MapLeftKey(b => b.NetworkID,"NetworkID"); m.ToTable("IPM_OUIDMap"); }); } } IPM_NetworkMaster: public class IPM_NetworkMaster { public int NetworkID { get; set; } <snip> public virtual ICollection<NET_OU> NET_OUs { get; set; } } NET_OU: public class NET_OU { public int NET_OUID { get; set; } <snip> public virtual ICollection<IPM_NetworkMaster> IPM_NetworkMasters { get; set; } } 解决方法
正如大家所提到的,您需要分析您的查询.假设您正在使用SQL Server,您可以调高
SQL Server Profiler并比较查询和执行计划.
与任何性能问题一样,您必须先测量.根据您的方案,您必须执行更多操作.您必须使用每种技术测量两次,并确保您将苹果与苹果进行比较.如果你可以排除正在生成的sql,那么你将需要测量应用程序代码,以便可能排除那里的任何瓶颈. 我怀疑它将是生成的查询. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- [Swift]LeetCode254.因子组合 $ Factor Combinations
- ruby – 为什么赋值的值总是参数的值?
- 防止SQLite Magellan破坏您的应用程序
- Xml、XmlPullparser解析数据Android
- cocoStudio:Button三种状态需要对应不同的图片
- No grammar constraints (DTD or XML schema).....两种解决
- 异步模式下的Ajax的同步问题
- 针对flex Channel.Connect.Failed error NetConnection.Cal
- Quick Cocos2dx 与 Eclipse 连真机debug遇到的问题
- NAND和NOR flash的区别